当文本更改并符合某些条件时,更改文本框的前景色

5
我需要在文本框内输入的文字符合某些条件时,设置文字颜色。可以通过 textbox_textchanged 事件来实现,并使用 set brushes.color 设置所需的颜色。
但我不知道如何用 XAML WPF 方法实现这一点。我对 WPF 不熟悉,不确定如何在文本框中更改文本时根据某些条件设置文本颜色。
例如:对于给定的文本框,在文本更改时,需要确定输入的文本是否为数字,如果是,则将前景颜色更改为绿色,否则为红色。
期待您的帮助。谢谢。
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”时,其前景色将变为红色。


我已经实现了这个功能,它完美地运行了。非常感谢您的帮助 :) - Aarohi S
@AarohiS 很高兴能够帮到您。您可以将我的帖子标记为您问题的答案吗?非常感谢。 :) - Colin

1
您只需在WPF中插入TextChanged事件,并在XAML中绑定一个方法到此事件。然后,您可以检查新值是否符合您的条件,并相应地更改颜色。我不确定您所说的“XAML方法”是什么意思,但在这种情况下,当您只想将行为附加到控件之一上引发的事件时,使用TextChanged已经尝试过并不是错误的方法。这就是为什么事件首先在XAML中可见的原因。

谢谢。我有这个文本框: <TextBox Name="txt_Test" TextChanged="TextBox_TextChanged" />我已经编写了以下代码: private void TextBox_TextChanged(object sender, TextChangedEventArgs e) { if (txt_Test.Text == IsANumber) txt_Test.Foreground = Brushes.Red; else txt_Test.Foreground = Brushes.Green; }但是,我需要使用XAML中的触发器/数据触发器或其他可能的方式来采用不同的方法。 - Aarohi S
我很困惑为什么你在这里“需要”不同的方法?我认为你现在的做法没有任何问题。这是你的雇主或其他方面的要求吗? - Jesse Carter
是的,使用XAML方法而不是后台代码方法是必需的。 - Aarohi S

0

检查每次输入时文本框中字符串的长度。 如果长度>10或您想要的任何长度,则更改颜色。 您还可以将其触发灰色按钮。

示例:

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

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接