WPF KeyBinding Guesture для Ctrl + Shift + Zero не работает - PullRequest
3 голосов
/ 24 июня 2011

Я пытаюсь выполнить сопоставление Ctrl + Shift + 0 с WPF 3.5sp1, но привязка не срабатывает.Я использую 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 !На самом деле, клавиша D0 вообще не появляется, когда я удерживаю Ctrl + 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));
}

1 Ответ

5 голосов
/ 24 июня 2011

Я обнаружил проблему. Виновником является изменение интернационализации, сделанное в Vista (которое наследует Win7), связанное с тем, как меняются раскладки клавиатуры. Существует тема КБ , в которой обсуждается эта проблема и способы ее решения:

Сочетание клавиш редактора метода ввода ( CTRL + SHIFT + 0 ) переключает язык ввода в Vista

...