我搞砸了PreviewLostKeyboardFocus这几乎可以让你到达那里。我见过几个使用 LostFocus 的实现。 , 但这只会迫使人们重新关注 TextBox失去焦点后,您可以轻松地在屏幕上看到这种变化。基本上,我只是在寻找使用 OnValidating 可以获得的相同类型的行为。在 WinForms 中。

请您参考如下方法:

在我看来,最好的方法通常是不这样做。在值有效之前禁用其他控件或阻止保存几乎总是更好。

但如果你的设计真的需要这种能力,你应该这样做:

  • 拦截Preview窗口级别的键盘和鼠标事件版本,或您想要防止焦点更改的任何范围(例如,可能不是您的菜单栏)。
  • 当在文本框中检测到 Tab KeyDown 或 Return KeyDown 时,或者当在文本框外检测到具有焦点的 MouseDown 时,在绑定(bind)表达式上调用 UpdateSource(),然后如果验证失败,则将 Handled=true 设置为防止进一步处理 KeyDown 或 MouseDown 事件。
  • 还要继续处理PreviewLostKeyboardFocus捕捉不是来自键盘或鼠标的任何焦点更改原因,或者您的其他代码无法识别的任何原因。

  • 评论关闭
    IT干货网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!