WPF 显示验证错误的默认方式是在控件周围绘制红色边框。通常需要对此方法进行自定义,以通过其他方式来显示错误。而且,默认情况下不会显示与验证错误关联的错误消息。常见的要求是仅当存在验证错误时才在工具提示中显示错误消息。通过将 Styles 和一组与验证关联的附加属性进行组合,可以相当轻松地自定义验证错误显示。

添加显示错误文本的工具提示非常简单。只需定义一个应用于输入控件的 Style,每当存在验证错误时,它便将该控件上的 ToolTip 属性设置为验证错误文本。若要对此提供支持,需要使用两个附加属性:Validation.HasError 和 Validation.Errors。下面演示了一个针对 TextBox 类型并设置工具提示的 Style:

 Value="True">
 RelativeSource="{x:Static RelativeSource.Self}" />

您可以看到,Style 只包含 Validation.HasError 附加属性的属性触发器。当 Binding 更新其源对象属性且验证机制生成错误时,HasError 属性会设置为 true。这种情况可能源自异常、ValidationRule 或 IDataErrorInfo 调用。该 Style 随后使用 Validation.Errors 附加属性,该属性会在存在验证错误时包含一个错误字符串集合。可以使用该集合类型的 CurrentItem 属性来仅获取集合中的第一个字符串。也可以设计为将数据绑定到集合,并为面向列表的控件中的每一项显示 ErrorContent 属性。

若要将控件的默认验证错误显示更改为红色边框之外的内容,需要将 Validation.ErrorTemplate 附加属性设置为要自定义的控件上的新模板。在示例应用程序中,将在存在错误的每个控件右侧显示一个小的红色渐变圆形,而不是显示红色边框。为此,可定义用作 ErrorTemplate 的控件模板。

 ToolTip="Contains invalid data"
 Width="10"Height="10">

若要将该控件模板挂接到某个控件,只需设置该控件的 Validation.ErrorTemplate 属性,您可以通过 Style 再次执行此操作:

Value="{StaticResource InputErrorTemplate}" />