Ctrl + Shift +零的WPF KeyBinding Guesture不起作用

Posted

技术标签:

【中文标题】Ctrl + Shift +零的WPF KeyBinding Guesture不起作用【英文标题】:WPF KeyBinding Guesture for Ctrl+Shift+Zero not working 【发布时间】:2011-09-22 06:30:00 【问题描述】:

我正在尝试使用 WPF 3.5sp1 映射 Ctrl+Shift+0,但绑定不会触发。我使用的 XAML 是:

<KeyBinding Gesture="Ctrl+Shift+D0" Command="Blah"/>

我也试过了:

<KeyBinding Key="D0" Modifiers="Ctrl+Shift" Command="Blah" />

还有许多其他组合,但都不起作用。 Gesture="Ctrl+D0" 效果很好,或者“Ctrl+Shift+OemPlus”等,所以我认为我的语法不是问题。我查看了 Key 枚举并试图查看“Shift-D0”是否被重新映射为“OemParen”之类的东西,但没有任何东西跳出来。

我什至在我的窗口上放置了一个 PreviewKeyDown 处理程序,但我从来没有看到 KeyEvent 其中 Key == D0 和 Keyboard.ModifierKeys == Shift + Ctrl!事实上,当我按住 Ctrl+Shift 时,D0 按键根本不会出现。

public MainWindow()

    InitializeComponent();
    this.PreviewKeyDown += MainWindow_PreviewKeyDown;


void MainWindow_PreviewKeyDown(object sender, KeyEventArgs e)

    if ((Keyboard.Modifiers & ModifierKeys.Shift) != 0)
    
        Trace.WriteLine("shift is down!");
    
    Trace.WriteLine(string.Format("key: 0, system key: 1, modifiers 2", e.Key, e.SystemKey, e.KeyStates));

【问题讨论】:

我发现这不是 WPF 问题,但问题本身仍然有效,答案似乎并不为人所知。我应该如何更新问题摘要以反映这一点? 【参考方案1】:

我发现了问题。罪魁祸首是在 Vista(Win7 继承)中进行的与键盘布局更改方式相关的国际化更改。有一个KB topic 讨论这个问题和解决方法:

Input method editor keyboard shortcut (CTRL+SHIFT+0) switches the input language in Vista

【讨论】:

以上是关于Ctrl + Shift +零的WPF KeyBinding Guesture不起作用的主要内容,如果未能解决你的问题,请参考以下文章

WPF - 按下CTRL + SHIFT时如何捕获?

如何使用 WPF 和 .NET 3.5 注册全局热键以说出 CTRL+SHIFT+(LETTER)?

WPF中怎样设置ctrl或shift+字母键为快捷键啊?

WPF中设置组合键时间

Wpf依赖属性动态键向下

在WPF中设置快捷键,比如ctrl+Enter,shif+D。可否借参考下MyHotKeyClass