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

标签 wpf validation textbox wpf-controls focus

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

最佳答案

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

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

  • 拦截Preview窗口级别的键盘和鼠标事件版本,或您想要防止焦点更改的任何范围(例如,可能不是您的菜单栏)。
  • 当在文本框中检测到 Tab KeyDown 或 Return KeyDown 时,或者当在文本框外检测到具有焦点的 MouseDown 时,在绑定(bind)表达式上调用 UpdateSource(),然后如果验证失败,则将 Handled=true 设置为防止进一步处理 KeyDown 或 MouseDown 事件。
  • 还要继续处理PreviewLostKeyboardFocus捕捉不是来自键盘或鼠标的任何焦点更改原因,或者您的其他代码无法识别的任何原因。
  • 关于wpf - 当出现验证错误时,防止失去 TextBox 焦点的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2163303/

    相关文章:

    c# - 更改 ComboBox 文本但不更改所选项目

    asp.net - 在asp.net中RequiredFieldValidator Text和ErrorMessage有什么区别?

    codeigniter - 如何使用 CodeIgniter 的表单验证类验证 "does not match"类型?

    WPF 文本框保留可见插入符号

    c# - 尝试在 asp.net 中启用显示/隐藏功能

    c# - 后台运行方法和UI Thread WPF

    wpf - 使用 MVVM WPF 在 ViewModel 中实现事件处理程序

    c# - 列表框选择更改事件 : get the value before it was changed

    c# - 尝试突出显示 C# TextBox 时的不一致行为

    asp.net-mvc - 关于号码问题的 FluentValidation