如何强制更新WPF TextBox验证状态以移除错误提示红线
解决WPF TextBox验证错误后红线不消失的问题
嘿,这个问题我之前也踩过坑!你已经实现了错误发生时恢复控件值的逻辑,但WPF的验证状态并不会自动跟着清除——就好像它还记着之前的错误,哪怕你已经把值改对了。
要解决这个问题,只需要在更新目标值之后,手动清除绑定表达式的无效验证状态就行。修改你的事件处理代码:
private void TextBox_ValidationErrorEventHandler(object sender, RoutedEventArgs e) { var tb = (TextBox)sender; DependencyProperty prop = TextBox.TextProperty; BindingExpression binding = BindingOperations.GetBindingExpression(tb, prop); if (binding != null) { binding.UpdateTarget(); // 新增这行,主动清除绑定的验证错误标记 Validation.ClearInvalid(binding); } }
为什么这行代码有用?
当验证错误触发时,WPF会把错误信息关联到对应的BindingExpression上,哪怕你通过UpdateTarget()把控件值恢复成了合法值,这个错误标记依然存在。Validation.ClearInvalid(binding)就是告诉WPF:“这个绑定现在没有错误了,赶紧把错误提示去掉!”,这样控件周围的红线就会自动消失了。
另外小提醒:确保你的TextBox绑定已经正确开启了验证(比如设置了ValidatesOnExceptions="True"或者ValidatesOnDataErrors="True"),不过从你的描述来看这部分应该是没问题的,主要就是补上清除验证状态的步骤~
内容的提问来源于stack exchange,提问作者Oystein
相关产品推荐
相关产品推荐

