Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当文本发生变化并满足一定条件时,更改文本框的前景色_C#_.net_Wpf_Textbox_Foreground - Fatal编程技术网

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

C# 当文本发生变化并满足一定条件时,更改文本框的前景色,c#,.net,wpf,textbox,foreground,C#,.net,Wpf,Textbox,Foreground,我需要设置文本颜色时,文本框内的文字变化,并满足一定的标准。我可以通过textbox\u textchanged事件和将笔刷颜色设置为所需颜色,从代码隐藏中实现这一点 但我无法用xaml wpf方法实现这一点。我是wpf新手,我不确定当文本框中的文本发生变化时,如何根据特定标准设置文本颜色 例如:对于给定的文本框,当文本更改时,它需要确定输入文本是否为数字,然后将前景色更改为绿色或红色。 期待您的帮助。提前感谢。您应该能够插入wpf中的TextChanged事件,并在XAML中将方法绑定到此事件

我需要设置文本颜色时,文本框内的文字变化,并满足一定的标准。我可以通过textbox\u textchanged事件和将笔刷颜色设置为所需颜色,从代码隐藏中实现这一点

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

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


期待您的帮助。提前感谢。

您应该能够插入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,你可能想看看交互性,交互性,触发器


IMMO我认为最好连接到代码属性/转换器/扩展等。。。为了更好的代码重用,当然是主观的意见。。。最后由您决定。

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

下面是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>

因此,解决方案使用数据触发器来实现目标。这里使用绑定转换器的唯一原因是,您需要一个位置来确定什么样的值应该改变文本框的前景。当文本框的值为“1”时,文本框的前景将为红色。

谢谢。我有这个文本框:我的代码是:private void textbox\u TextChanged(object sender,textchangedventargs e){if(txt_Test.Text==isanume)txt_Test.Foreground=brush.Red;else txt_Test.Foreground=brush.Green;}但是,我需要使用来自xaml的trigger/datatrigger或任何其他可能的方法来使用不同的方法。我不明白为什么您在这里“需要”不同的方法?我看不出你现在做事的方式有什么问题。这是你的雇主的要求还是什么?是的,这是一个使用xaml方法的要求,而不是背后的代码appraoch。我实现了这一点,它工作得非常完美。非常感谢您的帮助:)@AarohiS这是我的荣幸。你能在我的帖子上标出你问题的答案吗?非常感谢。:)
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;
    }
}