如何基于自定义的验证规则,使用 ErrorTemplate 和样式触发器来提供可视反馈,以便在输入无效值时向用户发出通知。
< TextBox Name = “textBox1” Width = “50” FontSize = "15"Validation.ErrorTemplate = "{StaticResource validationTemplate}Style = "{StaticResource textBoxInError}"Grid.Row = “1” Grid.Column = “1” Margin = “2” >
< TextBox.Text >
< Binding Path = “Age” Source = "{StaticResource ods}"UpdateSourceTrigger = “PropertyChanged” >
< Binding.ValidationRules >
< c:AgeRangeRule Min = “21” Max = “130” />
</ Binding.ValidationRules >
</ Binding >
</ TextBox.Text >
</ TextBox >
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
int age = 0;
try
{
if (((string)value).Length > 0)
age = Int32.Parse((String)value);
}
catch (Exception e)
{
return new ValidationResult(false, "Illegal characters or " + e.Message);
}
if ((age < Min) || (age > Max))
{
return new ValidationResult(false,
"Please enter an age in the range: " + Min + " - " + Max + “.”);
}
else
{
return new ValidationResult(true, null);
}
}
下面的示例演示了自定义的 ControlTemplate validationTemplate,它用于创建一个红色感叹号,以通知用户验证错误。控件模板用于重新定义控件的外观。
!
绑定到方法
在本示例中,TemperatureScale 是一个类,它有一个方法 ConvertTemp,该方法将接收两个参数(一个是 double 类型,另一个是 enum 类型 TempType),并将给定值从一个温标转换为另一个温标。在下面的示例中,ObjectDataProvider 用于实例TemperatureScale 对象。将使用两个指定参数调用 ConvertTemp 方法。
<Window.Resources>
<ObjectDataProvider.MethodParameters>
system:Double0</system:Double>
local:TempTypeCelsius</local:TempType>
</ObjectDataProvider.MethodParameters>
<local:DoubleToString x:Key=“doubleToString” />
</Window.Resources>