2011-01-09 4 views
4

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

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

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

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

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

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

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

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

Но Комбинация клавиш Ctrl + T ничего не делает.

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

ответ

2

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

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

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

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

Thanks H.B, но это свяжет «новую» команду с функцией «CommandBinding_Executed», внедренной в код окна. Однако пользовательский элемент управления должен обрабатывать его. Это больше проблема, так как пользовательский элемент управления создается динамически, и я не знаю, какая из 100 пользовательских команд, с которыми он сможет справиться. – Sprotty