Создать простую неизмененную привязку ключа в WPF - PullRequest
8 голосов
/ 24 ноября 2011

Я пытаюсь создать очень простое приложение WPF.Я хотел бы, чтобы обработчик команд вызывался, когда пользователь нажимает «H» (не Control-H или Alt-H, просто H).Если я использую следующее в коде с выделенным кодом:

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

, я немедленно получаю исключение о том, что комбинация клавиш и модификаторов не поддерживается для KeyGesture.

(я получаю то же самоеисключение, если я создаю XAML для аналогичных действий).

Мое приложение не принимает типизированный ввод, в приложении нет текстовых полей, поэтому на самом деле нет конфликта с текстом (по крайней мере, впо моему мнению).Я бы не подумал, что это было бы так необычно.

Я видел комментарии в других местах, которые предлагают, чтобы я мог создать собственный элемент управления для этого или перехватывать нажатия клавиш на низком уровне, но они кажутсямного накладных расходов.Есть более простые мысли?

1 Ответ

19 голосов
/ 24 ноября 2011

Не используйте тип или свойство KeyGesture (так как один ключ не является жестом).

, например

KeyBinding b = new KeyBinding()
    {
        Command = MyRoutedCommand,
        Key = Key.H
    };
InputBindings.Add(b);

То же самое для XAML

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