5

当文本框内的文本发生变化并符合特定标准时,我需要设置文本颜色。我可以使用textbox_textchanged事件从后面的代码中实现这一点,并将 Brushes.color 设置为所需的颜色。

但是我无法使用 xaml wpf 方法来实现这一点。我是 wpf 的新手,我不确定当文本框中的文本发生变化时如何根据特定标准设置文本颜色。

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

期待帮助。先感谢您。

4

4 回答 4

2

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

这是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 的前景将是红色的。

于 2013-06-07T15:20:08.460 回答
1

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

我不太确定您所说的“XAML 方法”是什么意思,但在这种情况下,当您只想将行为附加到在您的一个控件上引发的事件时,我认为按照您的方式进行操作并没有错已经尝试使用TextChanged. 这就是为什么事件首先在 XAML 中可见的原因。

于 2013-06-07T14:10:58.853 回答
0

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

在 XAML 中为 MVVM 使用 EventTrigger – 无代码隐藏

恕我直言,我认为最好连接到代码属性/转换器/扩展等......以获得更好的代码重用,但当然是主观的意见......最后总是取决于你。

于 2013-06-07T14:23:52.967 回答
0

检查每个输入中写入的文本框中的字符串长度。如果大于 10 或任何你想要的,然后改变颜色。您还可以使该触发器成为灰色的按钮。

样本:

MyTextBlock.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));

return new Size(MyTextBlock.DesiredSize.Width, MyTextBlock.DesiredSize.Height);
于 2013-06-07T14:11:06.750 回答