用于Ctrl + Shift + Zero的WPF KeyBinding Guesture无法正常工作

Arm*_*age 3 wpf winapi key-bindings windows-vista windows-7

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

<KeyBinding Gesture="Ctrl+Shift+D0" Command="Blah"/>
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

<KeyBinding Key="D0" Modifiers="Ctrl+Shift" Command="Blah" />
Run Code Online (Sandbox Code Playgroud)

还有许多其他组合,但都不起作用.手势="Ctrl + D0"效果很好,或"Ctrl + Shift + OemPlus"等,所以我认为我的语法不是问题.我查看了Key enum,并试图看看"Shift-D0"是否重新映射到类似"OemParen"的东西,但没有任何东西向我跳出来.

我甚至在我的Window上放了一个PreviewKeyDown处理程序,我从来没有看到KeyEvent Key == D0和Keyboard.ModifierKeys == Shift+ Ctrl!事实上,当我按住Ctrl+ 时,D0 keydown永远不会到达Shift.

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));
}
Run Code Online (Sandbox Code Playgroud)

Arm*_*age 5

我发现了这个问题.罪魁祸首是Vista中的一项国际化变革(Win7继承)与键盘布局的变化有关.有一个知识库主题讨论这个问题并解决这个问题:

输入法编辑器键盘快捷键(CTRL+ SHIFT+ 0)在Vista中切换输入语言