2016-07-04 6 views
0

Я использую CommandBinding до RoutedUICommand в своем приложении. Большинство из них имеют сочетания клавиш, которые работают во всем мире.WPF RoutedUICommand: как разрешить «вводить» ключ, который зарегистрирован как ярлык?

Для некоторых команд я хотел бы иметь однострочные ярлыки без модификаторов - например, клавиатуру «+» (Key.Add). Все это прекрасно работает, за исключением того, что когда сфокусировано управление текстовым вводом (например, TextBox), глобальная команда по-прежнему имеет приоритет, потребляет ключ и не позволяет его набирать, вместо этого выполняя команду. Тем не менее, я хочу, чтобы ключ был набран в таких обстоятельствах, а ярлык команды был заблокирован.

Есть ли достаточно простой способ достичь этого?

ответ

1

В делегате CanExecute вызовите свойство Keyboard.FocusedElement, верните значение false, если оно не равно null. Теоретически, он должен работать. Если это не сработает, сделайте это в делетете Execute и проверьте это и установите e.Handled в false.

+0

Нет, оба способа не работают. Клавиша потребляется, даже если «CanExecute» сигнализировал ложь или «Выполнено», что не обрабатывается. (Кроме того, 'Keyboard.FocusedElement' может быть законно установлен для многих других элементов, которые не нуждаются в обработке ключа, скажем,' RadioButton'). Обходной путь, который я нашел до сих пор, - связать рассматриваемую команду с соответствующей панелью или другим элементом ('TabItem' в моем случае), который не содержит редактируемых полей, а не всего окна или приложения. Это не универсальное решение, но может работать в большинстве практических случаев. – Zeus