我很确定你想要实现某种验证。
而不是使用触发器我会使用内置的WPF验证功能。
这样做的一种方法是在视图模型(或模型)中实现IDataErrorInfo
接口。
public class MainWindowViewModel : INotifyPropertyChanged, IDataErrorInfo
Error
属性实现:
public string Error { get { return null; } }
索引器的实现:
public string this[string columnName]
{
get
{
if(columnName == "SomeRandomText")
{
if(string.IsNullOrEmpty(SomeRandomText) || SomeRandomText.Length < 4)
{
return "Text should be at least four characters long";
}
}
return null;
}
}
在XAML:
<TextBox Text="{Binding SomeRandomText, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" />
结果:
如果你不想实现IDataErrorInfo
界面,您可以使用ValidationRule
秒。用ValidationRule
实现
同一件事:
<Binding Path="SomeRandomText" ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:LengthValidationRule RequiredLength="4" />
</Binding.ValidationRules>
</Binding>
而且ValidationRule
:
public class LengthValidationRule : ValidationRule
{
public int RequiredLength { get; set; }
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
var text = (string)value;
if(string.IsNullOrEmpty(text) || text.Length < RequiredLength)
{
return new ValidationResult(false, "Text should be at least four characters long");
}
return ValidationResult.ValidResult;
}
}
如果你想有一个不同的边框你可以看看到Validation.ErrorTemplate
附加属性。
如果你真的想用触发器来做到这一点,正如其他人提到的,你可以用一个名为LessThanConverter
的转换器来做到这一点。这将需要Text
的Length
以及您想要与ConverterParameter
进行比较的另一个数字,并且将返回bool
。
我认为你想要做的是数据验证。 WPF有一些工具 - 看看[http://blog.magnusmontin.net/2013/08/26/data-validation-in-wpf/](http://blog.magnusmontin.net/2013/ 08/26/data-validation-in-wpf /) – jHilscher
如果您确实想要使用样式触发器来完成这项工作,您必须编写自己的转换器。 – jHilscher
您可以检查文本长度是否为4,然后颜色可以是红色。但是对于小于,大于场景,你必须使用行为。 – AnjumSKhan