在WPF中创建一个简单的、未修改的按键绑定

12

我正在尝试创建一个非常简单的WPF应用程序。 我想在用户按下“H”(不是Ctrl-H或Alt-H,只是H)时调用命令处理程序。 如果在代码后台中使用以下代码:

var gesture = new KeyGesture(Key.H, ModifierKeys.None);
var inputBinding = new InputBinding(MyRoutedCommand, gesture);
InputBindings.Add(inputBinding);

我立即收到一个异常,提示KeyGesture不支持所提供的键和修改器组合。

(如果我创建XAML来执行类似的操作,我会得到相同的异常)

我的应用程序不接受输入,应用程序中没有文本框,因此在我的想法中没有与文本冲突的问题。我认为这不会那么不寻常。

我在其他地方看到评论说我可以为此创建自定义控件或以低级别拦截键盘按键,但这些似乎过于繁琐。您有更简单的想法吗?

1个回答

24
不要使用KeyGesture类型或属性(因为一个键不是一个手势)。
例如:
KeyBinding b = new KeyBinding()
    {
        Command = MyRoutedCommand,
        Key = Key.H
    };
InputBindings.Add(b);

XAML同理

<KeyBinding Command="{Binding MyRoutedCommand}" Key="H" />

这对我完全没用。它仍然给出相同的错误。 - DanO
@Daniel:可能使用了旧版的.NET? - H.B.
@H.B.:我正在使用.NET Framework 4.0,并使用Visual Studio 2010进行编译。最终,我只是在窗口中添加了一个KeyDown事件,并检查了按下的特定键。 - DanO
这也行不通,因为键+修饰键的验证也会被触发。 - Nicke Manarin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接