使用多个修改器键在WPF中创建键绑定


74

我创建的方式KeyBinding类似于:

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

但是,如果我需要两个修饰键怎么办?例如,Ctrl+ Shift

Answers:


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中定义KeyBinding时,有两种方法可以指定KeyGesture。

在XAML中建立KeyBinding的第一种方法是定义KeyBinding元素的Gesture属性,该属性使语法可以将键和修饰符指定为单个字符串,例如“ CTRL + P”。

第二种方法是定义KeyBinding元素的Key属性和Modifiers属性。

设置KeyGesture的两种方法都是等效的,并且可以修改相同的基础对象,但是如果同时使用这两种方法,则会发生冲突。如果同时设置了Key,Modifiers和Gesture属性,则最后定义的属性将用于KeyGesture。


Microsoft Docs:详细的XAML语法-枚举属性值“ KeyBinding.Modifiers ...该属性碰巧是一种特殊情况,因为ModifierKeys枚举支持其自己的类型转换器。修饰符的类型转换器使用加号(+)。作为分隔符而不是逗号(,)。此转换支持更传统的语法来表示Microsoft Windows编程中的键组合,例如“ Ctrl + Alt”。


6

我知道问题是针对XAML的,但是如果您想在代码中进行操作,可以使用以下示例(可以通过逻辑OR指定多个ModifierKeys):

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

2

这是我的代码,用于实现多个字符快捷键,例如WPF MVVM中的Alt+ P+ A

将此添加到您的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都被重载以接受Action或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" >
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.