source

여러 개의 수식 키를 사용한WPF에서의 KeyBinding 작성

lovecheck 2023. 4. 12. 22:28
반응형

여러 개의 수식 키를 사용한WPF에서의 KeyBinding 작성

내가 만든 방법KeyBinding다음과 같은 것이었죠.

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

하지만 수식 키가 두 개 필요했다면?예를 들어 + 입니다.

문서에는 수식자를 다음과 같이 구분하기만 하면 된다고 기술되어 있습니다.+캐릭터:

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

링크가 사라졌을 경우에 대비하여 아래의 관련 비트를 추출하여 자세한 내용은 여기를 참조하십시오.


XAML

<object property="oneOrMoreModifierKeys"/>

XAML 값

oneOrMoreModifierKeys: 에 의해 정의되는1개 또는 여러 개의 수식 키ModifierKeys열거형, 구분자:+성격.


키/수식자 콤보가 아닌 제스처 자체를 사용할 수도 있습니다.

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

동일한 문서 링크에 따라 다음을 수행합니다.

XAML에서 KeyBinding을 정의할 때 KeyGesture를 지정하는 방법은 두 가지가 있습니다.

XAML에서 KeyBinding을 확립하는 첫 번째 방법은 KeyBinding 요소의 제스처 속성을 정의하는 것입니다.이것에 의해, 구문은 「CTRL+P」등의 키와 수식자를 단일 문자열로서 지정할 수 있습니다.

두 번째 방법은 KeyBinding 요소의 Key Atribut과 Modifiers Atribut을 정의하는 것입니다.

KeyGesture를 설정하는 두 가지 방법은 동일하며 동일한 기본 개체를 수정하지만 둘 다 사용할 경우 충돌이 발생합니다.Key, Modifiers 및 Gesture Atribut이 모두 설정되어 있는 경우 마지막으로 정의된 Atribut이 KeyGesture에 사용됩니다.

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

MSDN 의 메뉴얼 「KeyBinding Class」를 참조해 주세요.

XAML에 관한 질문인 것은 알고 있습니다만, 코드로 실시하는 경우의 예를 다음에 나타냅니다(논리 OR을 통해 복수의 Modifier Key를 지정할 수 있습니다).

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

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);

다음은 바로 가기를 추가하는 두 가지 예입니다.첫 번째 숏컷은 + +로 Add Organization() 메서드를 실행하고 두 번째 숏컷은 +로 ICommand CmdAddNewAgreemnt를 실행합니다.

Add Double Letter ShortCut 및 Add Single Letter ShortCut이 모두 오버로드되어 액션 또는 ICommand를 수락합니다.

이것은 제가 처음 시도하는 어떤 것의 생성 중 하나이기 때문에, 당신은 아이디어를 가지고 그것을 당신에게 적합하게 만들 수 있습니다.

너무 늦었을 수도 있지만 여기 가장 간단하고 짧은 해결책이 있습니다.

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

언급URL : https://stackoverflow.com/questions/4050066/creating-keybinding-in-wpf-with-more-than-one-modifier-key

반응형