Keyboard.IsKeyDown () в .NET возвращает неправильное значение? - PullRequest
0 голосов
/ 18 февраля 2019

Я устанавливаю событие для моего RichTextBox в WPF :

_window._richTextBox.PreviewKeyDown += _richTextBox_PreviewKeyDown;

Затем в _richTextBox_PreviewKeyDown я получаю информацию о нажатых в настоящее время клавишах на клавиатуре:

bool isAltPressed = Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt);
bool isCtrlPressed = Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl);
bool isShiftPressed = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift);

Затем я нажимаю только клавишу «RightAlt» на клавиатуре.

При первом достижении точки останова в _richTextBox_PreviewKeyDown

  • isAltPressed = false
  • isCtrlPressed = true

(потому что Keyboard.IsKeyDown(Key.LeftCtrl) возвращает true) и isShiftPressed = false.

Только после второго попадания в точку останова

`isAltPressed = false`

Может ли кто-нибудь объяснить мне такое странное поведение?Можно ли как-то проверить «настоящие» нажатые клавиши на клавиатуре?Наконец, когда я нажимаю правую клавишу Alt на клавиатуре Keyboard.IsKeyDown(Key.LeftCtrl) = true, что вводит в заблуждение.

...