WPF TextBox验证错误重复显示且修复后红色边框未消除问题
问题根因
你遇到的红色边框不属于TextBox的控件模板,而是ContentControl外层的默认验证装饰层:
- WPF的ContentControl绑定
Content属性时,会自动对绑定的数据源(这里是实现了IDataErrorInfo的ChildViewModel实例)做验证检测,当数据源的Error属性不为空时,会自动套用系统默认的Validation.ErrorTemplate,也就是1px宽的红色边框,渲染在装饰器层,优先级高于控件本身的视觉样式。 - 你用
DataContext绑定的方案不会复现问题,是因为DataContext是WPF专门的上下文属性,默认不会对属性值本身做验证检查,自然不会触发外层的验证边框。 - 修正数据后红色边框不消失,是因为ContentControl的验证状态和内部TextBox的验证状态没有同步更新,装饰层的状态卡住导致的。
解决方案
直接修改ContentControl的定义,两种方案二选一即可:
方案1:关闭Content绑定的验证
在Content属性绑定中添加ValidatesOnDataErrors=False,禁止对Content数据源本身做验证:
<ContentControl Grid.Column="1" Grid.Row="1" Content="{Binding SelectedItem, ValidatesOnDataErrors=False}"> <!-- 原有内容不变 --> </ContentControl>
方案2:清空ContentControl的验证错误模板
直接给ContentControl设置空的验证错误模板,彻底去掉外层的红色边框装饰:
<ContentControl Grid.Column="1" Grid.Row="1" Content="{Binding SelectedItem}" Validation.ErrorTemplate="{x:Null}"> <!-- 原有内容不变 --> </ContentControl>
修改后红色边框会完全消失,你自定义的TextBox蓝色验证边框可以正常工作,数据修正后状态也会同步更新。
内容的提问来源于stack exchange,提问作者Octan
相关产品推荐
相关产品推荐

