如何防止可编辑控件中的焦点被Enter键关闭窗口?
通常,我使用IsCancel=True
进行取消,而使用IsDefault=True
进行确定。这是因为它将允许用户关闭一个对话框,其中Enter键为OK,Esc键为Cancel。
但是,问题是即使键盘焦点位于可编辑控件(例如TextBox
)中,按Enter键也会关闭对话框。
最好的行为是仅当键盘焦点不在可编辑控件中时,按Enter键才能关闭对话框。但是,按Enter键两次将关闭对话框。否则,用户需要将键盘焦点更改为另一个不可编辑的控件,然后按Enter键关闭。
因此,作为一种解决方法,我实现了这种方式:
拦截KeyDown
事件并检查
如果是Enter键。
如果是这样,请检查键盘焦点是否为
在确定按钮。
如果是这样,请单击确定关闭对话框
按钮。否则,请更改
键盘焦点移至“确定”按钮。因此,按Enter键两次将关闭对话框。
这是有问题的,因为第一个Enter会将焦点更改为Ok按钮,因此,如果焦点不在Ok按钮上,则用户需要按Enter两次。这与理想行为没有什么不同。另外,我需要为每个对话框实现此逻辑。
有人有解决这个问题的好主意吗?
最佳答案
如果要查找此特定行为,我只需在第一次输入Enter时在KeyDown
事件处理程序中将一些布尔值设置为true(而不是切换焦点)即可。然后,在下一个KeyDown
事件中,我将检查按键是否为Enter,以及之前是否已按下Enter。为了在一个以上的对话框中实现此目的,我将创建一个通用对话框,在该对话框中,我将覆盖OnKeyDown
方法而不是订阅事件,然后对该对话框进行子类化。
(话虽如此,作为用户,我根本不喜欢这种行为。我建议仅在文本框中完全忽略Enter键,这是用户习惯的做法。)
关于c# - WPF中可编辑控件中的焦点时如何防止使用“Enter”键关闭窗口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5226103/