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

标签 wpf winapi windows-7 windows-vista key-bindings

我正在尝试使用 WPF 3.5sp1 映射 Ctrl+Shift+0,但绑定(bind)不会触发。我使用的 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));
}

最佳答案

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

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

关于Ctrl + Shift +零的WPF KeyBinding Guesture不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6472273/

相关文章:

c# - 在 WPF 中填写所有字段之前,表单验证禁用提交按钮

winapi - 在 Windows 中传输大文件的最佳方式

c++ - 以编程方式允许对注册表项进行写访问

winapi - 从模拟线程创建进程

visual-studio - 有没有人在 Windows 7 上使用 Visual Studio 6 取得成功?

c# - 我能找到 .NET 4.0 的 WPF 图表控件教程吗

wpf - 可以对复合对象的字段进行数据绑定(bind)吗?

c++ - 如何制作克隆或扩展模式

windows - 如何自定义 Windows Vista 和 7 的登录屏幕?

c# - DataTrigger 内的 Storyboard 不会在 RaisePropertyChanged 事件上多次触发