WPF验证错误显示
WPF 显示验证错误的默认方式是在控件周围绘制红色边框。通常需要对此方法进行自定义,以通过其他方式来显示错误。而且,默认情况下不会显示与验证错误关联的错误消息。常见的要求是仅当存在验证错误时才在工具提示中显示错误消息。通过将 Styles 和一组与验证关联的附加属性进行组合,可以相当轻松地自定义验证错误显示。
添加显示错误文本的工具提示非常简单。只需定义一个应用于输入控件的 Style,每当存在验证错误时,它便将该控件上的 ToolTip 属性设置为验证错误文本。若要对此提供支持,需要使用两个附加属性:Validation.HasError 和 Validation.Errors。下面演示了一个针对 TextBox 类型并设置工具提示的 Style:
1 <Style TargetType="TextBox"> 2 <Style.Triggers> 3 <Trigger Property="Validation.HasError" 4 Value="True"> 5 <Setter Property="ToolTip"> 6 <Setter.Value> 7 <Binding 8 Path="(Validation.Errors).CurrentItem.ErrorContent" 9 RelativeSource="{x:Static RelativeSource.Self}" /> 10 </Setter.Value> 11 </Setter> 12 </Trigger> 13 </Style.Triggers> 14 </Style>
您可以看到,Style 只包含 Validation.HasError 附加属性的属性触发器。当 Binding 更新其源对象属性且验证机制生成错误时,HasError 属性会设置为 true。这种情况可能源自异常、ValidationRule 或 IDataErrorInfo 调用。该 Style 随后使用 Validation.Errors 附加属性,该属性会在存在验证错误时包含一个错误字符串集合。可以使用该集合类型的 CurrentItem 属性来仅获取集合中的第一个字符串。也可以设计为将数据绑定到集合,并为面向列表的控件中的每一项显示 ErrorContent 属性。
若要将控件的默认验证错误显示更改为红色边框之外的内容,需要将 Validation.ErrorTemplate 附加属性设置为要自定义的控件上的新模板。在示例应用程序中,将在存在错误的每个控件右侧显示一个小的红色渐变圆形,而不是显示红色边框。为此,可定义用作 ErrorTemplate 的控件模板。
1 <ControlTemplate x:Key="InputErrorTemplate"> 2 <DockPanel> 3 <Ellipse DockPanel.Dock="Right" Margin="2,0" 4 ToolTip="Contains invalid data" 5 Width="10" Height="10"> 6 <Ellipse.Fill> 7 <LinearGradientBrush> 8 <GradientStop Color="#11FF1111" Offset="0" /> 9 <GradientStop Color="#FFFF0000" Offset="1" /> 10 </LinearGradientBrush> 11 </Ellipse.Fill> 12 </Ellipse> 13 <AdornedElementPlaceholder /> 14 </DockPanel> 15 </ControlTemplate>
若要将该控件模板挂接到某个控件,只需设置该控件的 Validation.ErrorTemplate 属性,您可以通过 Style 再次执行此操作:
1 <Style TargetType="TextBox"> 2 <Setter Property="Validation.ErrorTemplate" 3 Value="{StaticResource InputErrorTemplate}" /> 4 ... 5 </Style>
出处:http://sirkevin.cnblogs.com
GitHub:https://github.com/backslash112
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted on 2012-07-25 23:33 backslash112 阅读(5455) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架