Создание связывания клавиш в WPF с несколькими ключами-модификаторами - PullRequest
61 голосов
/ 29 октября 2010

То, как я создал KeyBinding, было примерно таким:

<KeyBinding Modifiers="Ctrl" Key="S" Command="{Binding SaveCommand}" />

Но что, если мне понадобятся две клавиши-модификатора?Например, Ctrl + Shift .

Ответы [ 5 ]

113 голосов
/ 29 октября 2010

В документации говорится, что вы можете просто разделить модификаторы с помощью символа +:

<KeyBinding Modifiers="Ctrl+Shift" Key="S" Command="{Binding SaveCommand}" />

См. здесь для подробной информации, с соответствующими битами, извлеченными ниже в случаессылка исчезает:


XAML

<object property="oneOrMoreModifierKeys"/>

Значения XAML

oneOrMoreModifierKeys - один илидополнительные клавиши-модификаторы, определяемые перечислением ModifierKeys, ограниченные символом +.


Вы также можете использовать жест самостоятельно, а не комбинацию клавиш / модификаторов:

<KeyBinding Gesture="Ctrl+Shift+S" Command="{Binding SaveCommand}" />

согласно той же ссылке на документацию:

При определении связывания клавиш в XAML существует два способа указать KeyGesture.

Первый способ установить связывание ключейв XAML - определить атрибут Gesture элемента KeyBinding, который позволяет синтаксису указывать ключи и модификаторы в виде одной строки, например «CTRL + P».

Второй способ - определить атрибут Key.и атрибуты модификаторов KeyBindiЭлемент ng.

Оба способа установки KeyGesture эквивалентны и изменяют один и тот же базовый объект, но при использовании обоих будет конфликт.В случае, когда все атрибуты Key, Modifiers и Gesture установлены, атрибут KeyGesture, который определен последним, будет использоваться для KeyGesture.

14 голосов
/ 29 октября 2010
<KeyBinding Command="{Binding SaveCommand}"
            Gesture="Ctrl+Shift+S" />

См. Документацию MSDN, Класс связывания клавиш .

5 голосов
/ 10 июня 2013

Я знаю, что вопрос для XAML, но вот пример, если вы хотите сделать это в коде (несколько ModifierKeys могут быть указаны через логическое ИЛИ):

new KeyBinding( SaveCommand, Key.S, ModifierKeys.Control | ModifierKeys.Shift )
2 голосов
/ 03 апреля 2013

Вот мой код для реализации сочетаний клавиш из нескольких символов, например Alt + P + A в WPF MVVM.

Добавьте это к XAML (прикрепленное поведение для события KeyDown):

cb:ShortCutBehavior.Command="{Binding Shortcuts.CmdKeyPressed}"

Добавьте это к вашему виду модель:

ShortCuts Shortcuts = new ShortCuts( this );

//Add Plenty of shortcuts here until your heart is desired

Shortcuts.AddDoubleLetterShortCut( AddOrganization, Key.P, Key.A, ModifierKeys.Alt, true);
Shortcuts.AddSingleLetterShortCut( CmdAddNewAgreement, Key.A, ModifierKeys.Alt);

Это два примера добавления ярлыков. Первый - это двухбуквенный ярлык: Alt + P + A , который запускает метод AddOrganization (), а второй - это однобуквенный ярлык: Alt + A , который выполняет ICommand CmdAddNewAgreemnt.

И AddDoubleLetterShortCut, и AddSingleLetterShortCut перегружены для принятия действий или ICommands.

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

0 голосов
/ 12 апреля 2019

Возможно, уже слишком поздно, но вот самое простое и самое короткое решение.

private void Window_KeyDown(object sender, KeyEventArgs e)
{
    if (Keyboard.Modifiers == ModifierKeys.Control && e.Key == Key.S)
    {
         // Call your method here
    }
}

<Window x:Class="Test.MainWindow" KeyDown="Window_KeyDown" >
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...