c# - 如何防止在 WPF 中的可编辑控件中焦点时使用 "Enter"键关闭窗口

标签 c# wpf dialog keyboard-shortcuts

当焦点位于可编辑控件时,如何防止使用 Enter 键关闭窗口?

通常,我使用 IsCancel=True 进行取消,使用 IsDefault=True 进行确定。这是因为它将允许用户关闭对话框,使用 Enter 表示“确定”,Esc 表示“取消”。

但是,问题是按 Enter 键会关闭对话框,即使键盘焦点位于可编辑控件(例如 TextBox)中也是如此。 最好的行为是仅当键盘焦点不在可编辑控件中时按 Enter 键关闭对话框。但是,按 Enter 键两次应该关闭对话框。否则,用户需要将键盘焦点更改为另一个不可编辑的控件才能使用 Enter 键关闭。

因此,作为一种解决方法,我以这种方式实现:

  • 拦截KeyDown事件并检查 如果是Enter键。
  • 如果是,检查键盘焦点是否在 点击“确定”按钮。
  • 如果是这样,请单击“确定”关闭对话框 按钮。否则,请更改 键盘焦点移至“确定”按钮。因此,按两次 Enter 键将关闭对话框。

这有一个问题,因为第一个 Enter 会将焦点更改为“确定”按钮,因此如果焦点不在“确定”按钮上,用户需要按两次 Enter 。这与理想行为几乎没有什么不同。另外,我需要为每个对话框实现这个逻辑。

有人有解决这个问题的好主意吗?

最佳答案

如果寻找这种特定行为,我只需在第一次 Enter 被击中时在 KeyDown 事件处理程序中将一些 bool 值设置为 true(而不是切换焦点) )。然后,在下一个 KeyDown 事件中,我将检查按键是否为 Enter 以及是否有 Enter以前被打过。为了在多个对话框中实现这一点,我将创建一个通用对话框,在其中重写 OnKeyDown 方法而不是订阅事件,然后子类化该对话框。

(话虽如此,作为用户,我根本不喜欢这种行为。我建议在文本框中完全忽略 Enter 键 - 这就是用户所习惯的。)

关于c# - 如何防止在 WPF 中的可编辑控件中焦点时使用 "Enter"键关闭窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5226103/

相关文章:

c# - 类型必须是不可为空的值

.net - 如何在 WPF 中设置装饰器的 Z 顺序索引

javascript - 自动打开选择框

java - 无法在按钮单击 Android 上显示警报对话框

c# - 俄罗斯方 block 游戏的记分牌 .txt 记分牌

c# - Webservice 无法序列化,因为它没有无参数构造函数

javascript - Java 脚本未在我的应用程序中执行

c# - 面向组件的设计 : Problems with dependencies in dialogs

c# - Windows Presentation Foundation (WPF) 项目不支持网格

java - JFace Dialog 处理提交的数据 ( okPressed )