Подтвердить что ты не робот

Создание KeyBinding в WPF с несколькими ключами-модификаторами

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

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

Но что, если мне нужны два ключа-модификатора? Например, Ctrl + Shift.

4b9b3361

Ответ 1

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

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

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


XAML

<object property="oneOrMoreModifierKeys"/>

Значения XAML

oneOrMoreModifierKeys - Один или несколько ключей-модификаторов, определяемых перечислением ModifierKeys, разделенных символом +.


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

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

согласно той же самой ссылке:

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

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

Второй способ - определить атрибут Key и атрибуты Modifiers элемента KeyBinding.

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

Ответ 3

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

new KeyBinding( SaveCommand, Key.S, ModifierKeys.Control | ModifierKeys.Shift )

Ответ 4

Вот мой код для реализации нескольких ярлыков символов, например 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.

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

Ответ 5

Это может быть слишком поздно, но вот самое простое и самое короткое решение.

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" >