You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:54:02