当焦点位于可编辑控件时,如何防止使用 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/