【问题标题】:Prevent focusing close button when Enter key is pressed按下 Enter 键时防止对焦关闭按钮
【发布时间】:2012-09-11 15:46:23
【问题描述】:

我正在处理 myDialog1_KeyDown 事件,如果按下 Enter 键,我的方法会将焦点移至下一个元素,如下所示:

UIElement focusedElement = Keyboard.FocusedElement as UIElement;
if (focusedElement != null)
{
    if(focusedElement.MoveFocus(newTraversalRequest(FocusNavigationDirection.Next)))
    e.Handled = true;
}

myDialog1 是 myDockBase 对象。 myDockBase 是一个扩展 DXWindow 的类,用于应用程序中的每个模式对话框。

然后问题是当用户位于最后一个字段时 - 当他按下 Enter 键焦点移动到关闭按钮(最小化和最大化按钮被隐藏)然后如果他再次按下 Enter 窗口将关闭。

编辑:我想要的:如果关闭按钮获得焦点,则不允许用户在按下回车键时关闭窗口或不要将焦点移至关闭按钮

【问题讨论】:

  • 这严重违反了 UI 标准。勾选关闭按钮的 IsDefault 属性,因此按 Enter 始终关闭对话框。

标签: c# wpf


【解决方案1】:

一个解决方案可能是禁止关闭按钮获得焦点,假设您不需要它。请参阅Focusable 属性。如果您在代码中创建按钮:closeButton.Focusable = false。如果在 XAML 中:<Button Focusable="false" Command="...">Close</Button>。这样,当您导航焦点时,关闭按钮不会出现在循环中。

【讨论】:

  • 我知道这个解决方案,但它只有在我在 xaml 中创建按钮时才有效。更好的解决方案是设置 IsTabStop="False",然后按钮可以通过鼠标而不是键盘聚焦。但是,我需要在标准的 Windows 关闭按钮(在窗口的右上角)上执行此操作。
【解决方案2】:

你没有说出你期望发生的事情。您可以检查当前控件是否是最后一个字段(您必须有一个 ID)。如果用户当前在最后一个字段中,请不要前进到下一个字段。

【讨论】:

  • 我添加了我希望我的问题发生的事情。我可以测试当前关注的字段是否是最后一个字段,但是我需要在每个表单上执行此操作(+将名称添加到最后一个字段)。我正在寻找更优雅的解决方案
  • 您可以将功能放在父类中,从它继承。确保始终为关闭按钮提供相同的 ID。
  • 是的,但我无法在我的课程中获得关闭按钮属性,并且它隐藏在设计器中。也许我可以尝试添加一个透明的最后一个字段,并在输入键时将焦点移动到第一个字段。
猜你喜欢
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
相关资源
最近更新 更多