当填写表单时,需要对填写的内容进行验证,检查数据是否符合要求,比如字符串的长度、日期的格式、数字等。WPF支持自定义验证规则,并提供可视化反馈,以便在输入无效值时向用户发出通知。
下面的示例将演示一个模拟员工信息录入的过程,如果年龄不再给定的输入范围内,将在文本框的后面显示一个红色的叹号,当鼠标移至错误文本框时,显示提示消息,提示用户正确的输入格式。
主要内容为:自定义验证规则、定义输入错误时控件的外观、定义样式触发器显示错误提示
自定义验证规则
可以继承ValidationRule类,重写Validate方法,实现自定义的验证规则
下面是年龄的验证规则的实现:
public
override
ValidationResult Validate(
object
value
, CultureInfo cultureInfo)
int
age = 0;
if
(((
string
)
value
).Length > 0)
age = Int32.Parse((String)
value
);
catch
(Exception e)
return
new
ValidationResult(
false
, "
输入的数字无效!
");
if
((age < Min) || (age > Max))
return
new
ValidationResult(
false
,
"
输入的年龄范围必须在:
" + Min + "
-
" + Max + "
之间
");
return
new
ValidationResult(
true
,
null
);
ValidationStep
该属性确定了验证的时机,它是一个枚举值
1 CommittedValue,该值提交到数据源后,运行ValidationRule,即不管验证是否能通过,属性都会被更新
2 ConvertedProposedValue,在进行了转换之后,运行ValidationRule,如果有数据转换,那么先转换再验证
3 RawProposedValue,在任何转换发生之前,运行ValidationRule
4 UpdatedValue,在更新了源后,运行ValidationRule,即属性值被更改之后,就会去验证,注意需要
ValidatesOnTargetUpdated设置为True
还需要注意的是Binding对验证结果的处理,NotifyOnValidationError设置为True,即当发生验证
错误时,错误信息会从目标沿着可视树往上冒泡,直到该冒泡事件被侦听到并被处理。
定义输入错误时控件的外观
自定义的 ControlTemplate,它用于创建一个红色感叹号,以通知用户验证错误。 控件模板用于重新定义控件的外观。
<
DockPanel
>
<
AdornedElementPlaceholder
/>
<
TextBlock
Foreground
="Red"
FontSize
="20"
>
!
</
TextBlock
>
</
DockPanel
>
</
ControlTemplate
>
AdornedElementPlaceholder表示一个占位符,这里表示具体的控件即TextBox,这里表示错误模板的布局是
如果有验证错误,那么在TextBox的后边会有一个TextBlock文本,文本的内容显示的是验证错误的信息。
<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
<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 employee}"
UpdateSourceTrigger="PropertyChanged" >
<Binding.ValidationRules>
<c:AgeRangeRule Min="21" Max="130"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Validation
这里涉及到了一个类
Validation
,它是一个静态类,它的使用大多以附加属性出现。它的主要功能是
1 设置ErrorTemplate
2 判断是否有错误(HasError),以及获取错误列表(Errors)
3 侦听验证错误事件
前两点前面都有提到,现在来看下 侦听验证错误冒泡事件
当输入的年龄不在定义范围内时,控件的显示方式如下:
注:当数据绑定验证时,如果验证规则的ValidationStep属性设置为RawProposedValue或ConvertedProposedValue值时,在验证失败的情况下,数据不会更新到源,这也在情理之中,不合格的数据我们当然不接受。
当填写表单时,需要对填写的内容进行验证,检查数据是否符合要求,比如字符串的长度、日期的格式、数字等。WPF支持自定义验证规则,并提供可视化反馈,以便在输入无效值时向用户发出通知。下面的示例将演示一个模拟员工信息录入的过程,如果年龄不再给定的输入范围内,将在文本框的后面显示一个红色的叹号,当鼠标移至错误文本框时,显示提示消息,提示用户正确的输入格式。主要内容为:自定义验证规则、定义输入错误时...
由于业务需要,需要使用TextBox输入数字,包括小数。所以需要对TextBox的输入
数据
进行验证。使用的办法分为以下两种
方法一:
Validation
+ Parameter
使用Binding.
Validation
Rules限制输入值的大小。
xaml定义
<UserControl.Resources>
<rule:
Validation
Params x:Key="
validation
Params0"/>
</UserControl.Resources>
using System.Globalization;
using System.Text.RegularExpressions;
using System.Windows.Controls;
namespace BindingDemo5
Validation
RuleDemo
public class RegisterValidatio.
数据
校验
的目的
用户在UI上输入的
数据
不一定符合Source的
数据
要求,故而要对其
数据
进行验证,并在不符合要求的时候,在UI上给出一定的反馈提示。本文主要参照《深入浅出
WPF
》的6.4节。
注:蓝色为主流程,绿色为必要细节条件。
<StackPanel Name="SP">
<!--在TextBox中设置
Validation
.Error事件-->
<TextBox Name