文本更改时满足特定条件,更改文本框的前景色

时间:2013-06-07 14:06:48

标签: c# .net wpf textbox foreground

我需要在文本框内文本更改时设置文本颜色并符合特定条件。我可以使用 textbox_textchanged 事件和将templates.color 设置为所需的颜色,从代码中实现此功能。

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

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

期待着帮助。提前谢谢。

4 个答案:

答案 0 :(得分: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的前景将为红色。

答案 1 :(得分:1)

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

我不太确定你的“XAML方法”是什么意思,但在这种情况下,当你只是想将行为附加到你的某个控件上引发的事件时我不认为这样做是错误的您尝试使用TextChanged的方式。这就是为什么事件首先在XAML中可见。

答案 2 :(得分:0)

检查文本框中每个输入上写入的字符串的长度。 如果它> 10或任何你想要的,那么改变颜色。 你也可以触发一个灰色的按钮。

样品:

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

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

答案 3 :(得分:0)

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

Using EventTrigger in XAML for MVVM – No Code Behind

IMMO我认为更好地连接代码属性/转换器/扩展等等......以便更好地重用代码,但当然主观意见......最后总是取决于你。