program tip

둘 이상의 수정 자 키를 사용하여 WPF에서 KeyBinding 만들기

radiobox 2020. 11. 14. 10:07
반응형

둘 이상의 수정 자 키를 사용하여 WPF에서 KeyBinding 만들기


내가 만든 방법 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 값

oneOrMoreModifierKeysModifierKeys열거에 의해 정의되고 문자로 구분 된 하나 이상의 수정 자 키 +입니다.


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

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

동일한 문서 링크에 따라 :

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

XAML에서 KeyBinding을 설정하는 첫 번째 방법은 KeyBinding 요소의 Gesture 특성을 정의하는 것입니다. 이렇게하면 구문에서 키와 수정자를 "CTRL + P"와 같은 단일 문자열로 지정할 수 있습니다.

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

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


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

MSDN 설명서, KeyBinding Class를 참조하십시오 .


XAML에 대한 질문이라는 것을 알고 있지만 코드에서 수행하려는 경우 샘플이 있습니다 (논리적 OR을 통해 여러 ModifierKeys를 지정할 수 있음).

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

다음은 WPF MVVM에서 + + 와 같은 여러 문자 바로 가기 키를 구현하는 코드 입니다.AltPA

다음을 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은 모두 Actions 또는 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" >

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

반응형