我们通常都会设置对输入的数值进行校验,在WPF也一样,在本示例中,我们使用两个控件,分别是TextBox1和Slider1,通过文本控件,输入符合slider的值,如果值不在此范围则显示文本框为红色,反映输入值不正确,控件不会因此改变。
1、XAML代码
<StackPanel>
<TextBox x:Name="TextBox1" Margin="5"/>
<Slider x:Name="slider1" Minimum="0" Maximum="100" Margin="5"/>
</StackPanel>
2、为了进行校验,我们准备了一个ValidationRule派生类RangeValidationRule,通过需要实现Validate方法,来对数据进行校验。把他们分到一个类去写放映了代码的业务分布效率。
写继承类之前需要引用using System.Windows.Controls;否则无效,一下是代码
class RangeValidationRule:ValidationRule
{
//需要实现Validate方法
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
double d = 0;
if (double.TryParse(value.ToString(), out d))
{
if (d >= 0 && d <= 100)
{
return new ValidationResult(true, null);
}
}
return new ValidationResult(false, "Validation Failed");
}
}
说明值只有在0到100之间是有效的。
3、在窗体构造器里写Binding
//建立绑定,设置源为slider1
Binding binding = new Binding("Value") { Source = this.slider1 };
//更新源等于标记源的属性
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
//添加校验规则
RangeValidationRule rvr = new RangeValidationRule();
//在此源中增加此规则
binding.ValidationRules.Add(rvr);
//将textbox1的文本属性与绑定源进行设定
this.TextBox1.SetBinding(TextBox.TextProperty, binding);
4、在输入正常值时候,进度块将随着文本框的数值进行改变
5、在输入违法数值时,进度块不动,文本框变红,反映输入值违法