我们通常都会设置对输入的数值进行校验,在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、在输入违法数值时,进度块不动,文本框变红,反映输入值违法