Створення прив'язки клавіш у WPF за допомогою більш ніж одного ключа модифікатора


74

Я створив KeyBindingщось на зразок:

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

Але що, якщо мені знадобляться дві модифікаційні клавіші? Наприклад, Ctrl+ Shift.

Відповіді:


134

У документації зазначено, що ви можете просто розділити модифікатори +символом:

<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 буде використаний атрибут, який визначений останнім.


Документи Microsoft: Докладно синтаксис XAML - Значення атрибутів перерахування : "KeyBinding.Modifiers ... ця властивість виявляється особливим випадком, оскільки перерахування ModifierKeys підтримує власний перетворювач типів. Перетворювач типів для модифікаторів використовує знак плюс (+) як роздільник, а не кома (,). Це перетворення підтримує більш традиційний синтаксис для представлення комбінацій клавіш у програмуванні Microsoft Windows, наприклад "Ctrl + Alt". " .
Панг


6

Я знаю, що питання стосується XAML, але ось зразок, якщо ви хочете зробити це в коді (кілька ModifierKeys можна вказати за допомогою логічного АБО):

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

2

Ось мій код для реалізації декількох символьних клавіш швидкого доступу, таких як 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

Це може бути занадто пізно, але ось найпростіше і найкоротше рішення.

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" >
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.