【问题标题】:WPF keybinding gesture with HOME/END not working带有HOME/END的WPF键绑定手势不起作用
【发布时间】:2013-12-03 09:16:12
【问题描述】:

我有一个 WPF 应用程序,我正在尝试将自定义按键手势与命令相关联。我试过这些:

<KeyBinding Gesture="HOME" Command="customCommand"/>
<KeyBinding Gesture="Ctrl + HOME" Command="customCommand"/>
<KeyBinding Gesture="ctrl + Alt + HOME" Command="customCommand"/>

它们都不行。但后来我尝试了

<KeyBinding Gesture="Ctrl + H" Command="customCommand"/>

它按预期工作。

我想知道Ctrl+HCtrl+Home 有什么区别? WPF 内部是否有任何东西阻止 HOME/End 键触发命令?

更新: 我想我找到了为什么它不起作用。基本上我们在最顶层的帧级别上定义了一个键绑定。结构是这样的: 框架 选项卡控件 用户控制

在用户控件内部,用户按下 HOME 按钮试图触发顶级命令。但似乎选项卡控件拦截并处理了命令。在这种情况下,HOME 按钮实际上是在关注第一个选项卡项。 有没有办法绕过tab控件,让顶层Frame直接处理?

【问题讨论】:

  • 发布相关的 XAML。您将这些 KeyGestures 应用于哪个 UI 元素?
  • 如果您找到了答案,请发布答案或删除您的问题。不要让它永远打开。
  • 我遇到了完全相同的问题,使用 Home 不起作用,但 Ctl+H 确实......赞成这个问题。

标签: c# wpf keyboard-shortcuts


【解决方案1】:

TabControl 处理 OnKeyDown 方法中的 Home 键,然后将焦点移至第一个选项卡项。

规避此行为的唯一方法是创建您自己的从TabControl 派生的控件并覆盖OnKeyDown 方法。例如:

public void MyTabControl : TabControl
{
    protected override void OnKeyDown(KeyEventArgs e)
    {
        if(e.Key != Key.Home)
        {
            base.OnKeyDown(e);
        }
    }
}

这将停止默认的TabControl 处理 Home 键。

【讨论】:

  • 我的 Home 命令是在我的 MainWindow 的 Window.InputBindings 中定义的,我遇到了同样的问题。
猜你喜欢
  • 1970-01-01
  • 2012-10-29
  • 2021-06-23
  • 2011-05-08
  • 1970-01-01
  • 2016-04-20
  • 2011-10-02
  • 1970-01-01
相关资源
最近更新 更多