【问题标题】:Change foreground color of textbox when text changes and meets certain criterion当文本更改并满足特定条件时更改文本框的前景色
【发布时间】:2013-06-03 21:05:43
【问题描述】:

当文本框内的文本发生变化并满足特定条件时,我需要设置文本颜色。我可以使用 textbox_textchanged 事件和 set brushes.color 从代码中实现这一点。

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

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

期待帮助。提前谢谢你。

【问题讨论】:

    标签: c# .net wpf textbox foreground


    【解决方案1】:

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

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

    【讨论】:

    • 我实现了这个并且效果很好。非常感谢您的帮助:)
    • @AarohiS 这是我的荣幸。您能否将我的帖子标记为您问题的答案?非常感谢。 :)
    【解决方案2】:

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

    Using EventTrigger in XAML for MVVM – No Code Behind

    IMMO 我认为最好连接到代码属性/转换器/扩展等...以实现更好的代码重用,但当然取决于意见...最终始终取决于您。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 谢谢。我有这个文本框: 我编码为: private void TextBox_TextChanged(object sender, TextChangedEventArgs e) { if (txt_Test.Text == IsANumber) txt_Test.Foreground = Brushes 。红色的;否则 txt_Test.Foreground = Brushes.Green;但是,我需要使用 xaml 中的触发器/数据触发器或任何其他可能的方式使用不同的方法。
      • 我很困惑为什么你在这里“需要”一种不同的方法?我看不出你现在做事的方式有什么问题。这是你雇主的要求还是什么?
      • 是的,需要使用 xaml 方法而不是后面的代码方法。
      【解决方案4】:

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

      示例:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-27
        • 2015-02-20
        • 2021-06-26
        • 2022-11-03
        • 2014-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多