Маршрутизация команд для сочетаний клавиш - PullRequest
4 голосов
/ 09 января 2011

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

более подробно....

У меня есть окно, которое имеет 3 элемента управления:

  • панель инструментов
  • текстовое поле
  • пользовательский элемент управления

На панели инструментов есть кнопка, связанная с командой CustomCommands.CmdA и связанная с сочетанием клавиш Ctrl + T .

Мой пользовательский элемент управления может обрабатывать CmdA.Когда я запускаю приложение и нажимаю на свой пользовательский элемент управления CmdA включен и работает нормально.Также Ctrl + T вызывает запуск команды.

Однако, когда я выбираю текстовое поле, моя пользовательская команда CmdA становится недоступной.

Я могу исправить это, установив цель команды для кнопки CmdA.Теперь, когда я выбираю textBox, CmdA все еще включен.

Но сочетание клавиш Ctrl + T ничего не делает.

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

1 Ответ

2 голосов
/ 10 января 2011

Для этого вам обычно нужно просто указать привязки ввода в окне, например:

 <Window.InputBindings>
        <KeyBinding Key="N" Modifiers="Control" Command="New"/>
        ...
 </Window.InputBindings>

Для встроенных команд приложения (которые RoutedCommands) вам нужно CommandBinding в окнеа также.

<Window.CommandBindings>
        <CommandBinding Command="New" Executed="CommandBinding_Executed" />
        ...
</Window.CommandBindings>
...