У меня есть код follwing (который не работает):
private void Window_PreviewKeyDown(object sender, KeyEventArgs e) {
e.Handled = true;
if ((e.Key == Key.P) && (Keyboard.Modifiers == ModifierKeys.Alt)) {
MessageBox.Show("Thanks!");
}
}
Почему это не работает? Событие стреляет, но
(e.Key == Key.P) && (Keyboard.Modifiers == ModifierKeys.Alt))
никогда не оценивает к истинному. Мое подобное использование событий Ctrl вместо Высокого звука таким образом работает. Также мои события, которые включают работу Ctrl и Alt также.
Лучший способ работы с ключами в WPF - это Жесты клавиш
, например обратите внимание, что это пример, а не решение.
<Window.InputBindings>
<KeyBinding Command="ApplicationCommands.Open" Gesture="ALT+P" />
</Window.InputBindings>
Это еще не все, но вы достаточно легко с этим справитесь. Это способ работы с ключами в WPF!
PK: -)
Вам нужно выполнить «побитовое и» с помощью ModifierKeys
, как показано ниже ...
private void Window_PreviewKeyDown(object sender, KeyEventArgs e) { if ((e.Key == Key.P) && ((e.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)) { MessageBox.Show("Thanks!"); e.Handled = true; } }
Также не забудьте установите свойство Handled
параметра e
...
MSDN дает нам этот пример :
if(e.Key == Key.P && e.Modifiers == Keys.Alt)
это работает для вас?