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