• 1780

前面的示例中,有关用户接受到错误的唯一指示是在违反规则的文本框周围的红色轮廓。为了提供更多信息,可以处理 Error 事件,但存储或清除错误时会引发该事件,但前提是必须确保已将 Binding.NotifyOnValidationError 属性设置为 True。

  1. <Binding Path="UnitCost" NotifyOnValidationError="True">

Error 事件是一个使用冒泡策略的路由事件,所以可以通过在父容器中关联事件处理程序为多个控件处理 Error 事件:

  1. <StackPanel x:Name="stackProductDetails" Validation.Error="stackProductDetails_Error">

事件代码:

  1. private void stackProductDetails_Error(object sender, ValidationErrorEventArgs e){
  2. if (e.Action == ValidationErrorEventAction.Added){
  3. MessageBox.Show(e.Error.ErrorContent.ToString());
  4. }
  5. }

在某些情况下,可能希望获取当前窗口(或窗口中的给定容器)中所有未处理的列表。这项任务较简单——就是遍历元素树,测试每个元素的 Validation.HasError 属性。

下面代码演示了一个专门查找 TextBox 对象中非法数据的示例:

  1. private void GetErrors(StringBuilder sb, DependencyObject obj){
  2. foreach (object child in LogicalTreeHelper.GetChildren(obj)){
  3. TextBox element = child as TextBox;
  4. if (element == null)
  5. continue;
  6. if (Validation.GetHasError(element)){
  7. sb.Append(element.Text + " has errors:\r\n");
  8. foreach (ValidationError error in Validation.GetErrors(element)){
  9. sb.Append(" " + error.ErrorContent.ToString());
  10. sb.Append("\r\n");
  11. }
  12. }
  13. }
  14. }
  15. private bool FromHasErrors(out string message){
  16. StringBuilder sb = new StringBuilder();
  17. GetErrors(sb, stackProductDetails);
  18. message = sb.ToString();
  19. return message != "";
  20. }
  21. private void cmdOK_Click(object sender, RoutedEventArgs e){
  22. string message;
  23. if (FromHasErrors(out message)){
  24. MessageBox.Show(message);
  25. }
  26. else{
  27. // ...
  28. }
  29. }
  30. }

最新文章

  1. angular+ionic返回上一页并刷新
  2. 作业七:团队项目——Alpha版本冲刺阶段-07
  3. Jenkins 2.7.3 LTS 发布
  4. 微信公众平台开发接口PHP SDK完整版(转载)
  5. webpack学习之入门实例
  6. 关于SQL Server的WITH(NOLOCK)和(NOLOCK)
  7. 领域驱动设计(DDD)部分核心概念的个人理解(转)
  8. java单元测试(Junit)
  9. [LeetCode] 2 Keys Keyboard 两键的键盘
  10. Github 开源项目(一)websocketd (实战:实时监控服务器内存信息)
  11. 清北学堂学习总结day3
  12. 一文搞定scrapy爬取众多知名技术博客文章保存到本地数据库,包含:cnblog、csdn、51cto、itpub、jobbole、oschina等
  13. 13. nginx,lvs之一
  14. C# winform combobox默认选中项方法
  15. static ,final 、abstract的作用,以及它们的联系和区别
  16. SpringMVC中异常捕获
  17. falsk注册etcd
  18. MoreEffectiveC++Item35 条款27: 要求或禁止对象产生于heap中
  19. 我的Python升级打怪之路【二】:Python的基本数据类型及操作
  20. SQL Server -&gt;&gt; 关于SQL Server Agent Job执行步骤时的用户上下文(User Context)问题

热门文章

  1. TX2 ROS IDE开发环境配置
  2. 单元测试JUnit 4(二)——keeps the bar green to keeps the code clean
  3. 解决 TextMate 2 无法安装 Emmet 插件
  4. [Android进阶]Binder学习(初始篇)
  5. Struts2架构分析和执行机制
  6. 微信模板消息php
  7. Freeswitch中文用户手册(第四章 SIP)----2
  8. 最全面的 Sublime Text 使用指南
  9. Android Studio编译的时候提示Gradle无法下载的解决方案
  10. IOS使用Charts