AKo*_*ran 5 validation wpf textbox focus wpf-controls
我搞砸了PreviewLostKeyboardFocus
几乎让你在那里.我已经看到了一些使用的实现LostFocus
,但这只会强制重点关注TextBox
它失去焦点后你可以轻松地在屏幕上看到这种变化.基本上,我只是在寻找OnValidating
在WinForms中使用的相同类型的行为.
在我看来,最好的方法通常是不要这样做.最好只禁用其他控件或阻止保存,直到值有效.
但如果你的设计确实需要这种能力,那么你应该做的是:
Preview
在您的窗口级别或您希望阻止焦点更改的任何范围内截取键盘和鼠标事件的版本(例如,可能不是您的菜单栏).
当在文本框中检测到Tab KeyDown或Return KeyDown时,或者当文本框中具有焦点时检测到MouseDown时,在绑定表达式上调用UpdateSource(),如果验证失败,则将Handled = true设置为防止进一步处理KeyDown或MouseDown事件.
还要继续处理PreviewLostKeyboardFocus
以捕获不是键盘或鼠标或您的其他代码无法识别的任何焦点更改原因.