Я створив 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}" />
згідно з тим самим посиланням на документацію:
Визначаючи прив’язку клавіш у XAML, існує два способи вказати KeyGesture.
Перший спосіб встановити прив'язку ключів у XAML - це визначити атрибут Gesture елемента KeyBinding, що дозволяє синтаксису вказувати ключі та модифікатори як єдиний рядок, наприклад "CTRL + P".
Другий спосіб полягає у визначенні атрибута Key та атрибутів Modifiers елемента KeyBinding.
Обидва способи встановлення KeyGesture еквівалентні і модифікують один і той же базовий об'єкт, але виникне конфлікт, якщо використовувати обидва. У випадку, коли всі атрибути Key, Modifiers та Gesture встановлені, для KeyGesture буде використаний атрибут, який визначений останнім.
<KeyBinding Command="{Binding SaveCommand}"
Gesture="Ctrl+Shift+S" />
Див. Документацію MSDN, Клас прив’язки клавіш .
Ось мій код для реалізації декількох символьних клавіш швидкого доступу, таких як 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" >