当出现验证错误时,防止丢失TextBox焦点的最佳方法是什么?

AKo*_*ran 5 validation wpf textbox focus wpf-controls

我搞砸了PreviewLostKeyboardFocus几乎让你在那里.我已经看到了一些使用的实现LostFocus,但这只会强制重点关注TextBox它失去焦点后你可以轻松地在屏幕上看到这种变化.基本上,我只是在寻找OnValidating在WinForms中使用的相同类型的行为.

Ray*_*rns 5

在我看来,最好的方法通常是不要这样做.最好只禁用其他控件或阻止保存,直到值有效.

但如果你的设计确实需要这种能力,那么你应该做的是:

  1. Preview在您的窗口级别或您希望阻止焦点更改的任何范围内截取键盘和鼠标事件的版本(例如,可能不是您的菜单栏).

  2. 当在文本框中检测到Tab KeyDown或Return KeyDown时,或者当文本框中具有焦点时检测到MouseDown时,在绑定表达式上调用UpdateSource(),如果验证失败,则将Handled = true设置为防止进一步处理KeyDown或MouseDown事件.

  3. 还要继续处理PreviewLostKeyboardFocus以捕获不是键盘或鼠标或您的其他代码无法识别的任何焦点更改原因.