Определение сочетания клавиш Ctrl + = (Ctrl + Key.OemPlus) - PullRequest
0 голосов
/ 15 октября 2019

У меня есть RichTextBox элемент управления, и мне нужно обработать CTRL + = комбинацию клавиш. = Сам знак Key.OemPlus. Так что проблема в том, что когда я нажимаю эту комбинацию, событие KeyDown не вызывается.

Я пробовал разные варианты кода, с Keyboard.IsKeyDown для обеих нажатых клавиш, с Keyboard.Modifiers для CTRL ключ и т.д ...

if (Keyboard.IsKeyDown(Key.OemPlus) && Keyboard.IsKeyDown(Key.LeftCtrl))
{
     // do smth
}
if (Keyboard.IsKeyDown(Key.OemPlus) && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
     // do smth
}
if (args.Key == Key.OemPlus && Keyboard.IsKeyDown(Key.LeftCtrl))
{
     // do smth
}
if (args.Key == Key.OemPlus && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
     // do smth
}

Итак, ни одна из приведенных выше попыток кода не сработала, и я не могу найти ответ в Google. Как решить эту проблему?

1 Ответ

0 голосов
/ 15 октября 2019

Классическая проблема перенаправленного события WPF. Маршрутизированное KeyDown событие обрабатывается внутренне RichTextBox. Он думает, что Ctrl + = - это команда, которую он распознал, поэтому он ест событие KeyDown, прежде чем попасть к вам. К счастью, есть решение: PreviewKeyDown. Если вы измените код для обработки PreviewKeyDown вместо KeyDown, вы обнаружите, что события запускаются так, как вы ожидаете.

...