为了实现这个功能用到了几个入门知识,这篇文章讲解如何组合这几个入门知识实现需求: - [Validation.Error 附加事件](
' target='_blank'>
[/reply]) - [WPF 中的树](
) - [附加属性](
) ## 2. Validation.Error 附加事件 为了实现自动获得焦点这个需求,我们首先需要一个和数据验证错误相关的事件通知。[Validation 类](
) 提供了很多支持数据验证的方法和附加属性,其中这次用到的是 [Validation.Error 附加事件](
' target='_blank'>
[/reply]),它在绑定元素遇到验证错误时触发。使用方式如下: ``` CS Validation.AddErrorHandler(target, (s, e) => { //some code }); ``` 注意,为了使用这个事件,数据绑定中的 注意,为了使用这个事件,数据绑定中的 [NotifyOnValidationError](
) 必须设置为 `true`: ``` XML Text="{Binding Name, Mode=TwoWay, NotifyOnValidationError=True}" ``` ## 3. WPF 中的树 使用 [VisualTreeHelper](
) 遍历 VisualTree,再通过 [Validation.GetHasError](
) 判断元素是否具有 [ValidationError](
),这样就可以找出所有数据验证错误的元素。我在以前的文章中提供了一个用于遍历 VisualTree 的扩展方法类 [VisualTreeExtensions](https://www.cnblogs.com/dino623/p/VisualTreeExtensions.html),这次我直接使用它找出第一次数据验证出错的元素: ``` CS var root = Window.GetWindow(target).Content as UIElement; var errorElement
