当文本发生变化并满足一定条件时,更改文本框的前景色

本文关键字:文本 前景色 条件 变化 满足 | 更新日期: 2023-09-27 18:17:28

我需要在文本框内的文本发生变化并且满足一定的条件时设置文本颜色。我可以通过textbox_textchanged事件和设置笔刷从后面的代码实现这一点。color to desired color.

但是我不能用xaml wpf方法实现这一点。我是wpf的新手,我不确定如何在文本框中更改文本时根据某些标准设置文本颜色。

示例:对于给定的文本框,当文本变化时,它需要确定如果输入文本是数字,则将前景色更改为绿色否则为红色。

期待帮助。

当文本发生变化并满足一定条件时,更改文本框的前景色

我不确定在您的情况下是否允许绑定转换器。但是这里有一个解决方案,它只需要在你的代码中使用绑定转换器。

以下是xaml 中的代码
    <Grid.Resources>
        <local:ValueConverter x:Key="ValueConverter"></local:ValueConverter>
    </Grid.Resources>
    <TextBox Text="{Binding Text,UpdateSourceTrigger=PropertyChanged}">
        <TextBox.Style>
            <Style>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=Text,Converter={StaticResource ValueConverter}}" Value="True">
                        <Setter Property="TextBox.Foreground" Value="Red"></Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>

下面是视图模型和值转换器

public class ViewModel : INotifyPropertyChanged
{
    private string _text;
    public string Text
    {
        get
        {
            return this._text;
        }
        set
        {
            this._text = value;
            if (null != PropertyChanged)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs("Text"));
            }
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
}
public class ValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (null != value)
        {
            if (value.ToString() == "1")
                return true;
        }
        return false;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}

因此解决方案使用数据触发器来实现目标。这里使用绑定转换器的唯一原因是,您需要一个地方来确定哪种值应该改变TextBox的前景。这里,当TextBox的值为"1"时,TextBox的前景将是红色的。

您应该能够插入wpf中的TextChanged事件,并在XAML中将方法绑定到该事件。然后,您可以检查新值是否符合您的标准,并相应地更改颜色。

我不太确定你的意思是"XAML方法",但在这种情况下,当你只是想附加行为到一个事件上提出你的一个控件,我不认为这是错误的做法,你已经尝试过使用TextChanged。这就是为什么事件在XAML中是可见的。

检查每次输入时写入的文本框中字符串的长度。如果它>10或任何你想要的,然后改变颜色。你也可以让这个触发器变成一个灰色的按钮。

示例:

MyTextBlock.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
return new Size(MyTextBlock.DesiredSize.Width, MyTextBlock.DesiredSize.Height);

纯xaml?,你可能想看看交互性,交互,触发器?

在XAML中使用EventTrigger for MVVM -背后没有代码

我认为最好连接到代码属性/转换器/扩展等…为了更好的代码重用,但当然主观的意见…而最终的结局永远取决于你。