Способ создания KeyBinding
был примерно таким:
<KeyBinding Modifiers="Ctrl" Key="S" Command="{Binding SaveCommand}" />
Но что, если мне нужны два ключа-модификатора? Например, Ctrl + Shift.
Способ создания KeyBinding
был примерно таким:
<KeyBinding Modifiers="Ctrl" Key="S" Command="{Binding SaveCommand}" />
Но что, если мне нужны два ключа-модификатора? Например, Ctrl + Shift.
В документации указано, что вы можете просто отделить модификаторы с символом +
:
<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.
<KeyBinding Command="{Binding SaveCommand}"
Gesture="Ctrl+Shift+S" />
См. Документацию MSDN, класс связывания ключей.
Я знаю, что вопрос касается XAML, но здесь образец, если вы хотите сделать это в коде (несколько ModifierKeys могут быть указаны через логическое ИЛИ):
new KeyBinding( SaveCommand, Key.S, ModifierKeys.Control | ModifierKeys.Shift )
Вот мой код для реализации нескольких ярлыков символов, например 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.
Это одна из моих первых попыток обобщить что-то, поэтому вы можете принять эту идею и сделать ее подходящей для вас.
Это может быть слишком поздно, но вот самое простое и самое короткое решение.
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" >