Горячая клавиша WPF - Почему это не работает?

У меня есть код 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 также.

5
задан xav 23 April 2014 в 20:24
поделиться

3 ответа

Лучший способ работы с ключами в WPF - это Жесты клавиш

, например обратите внимание, что это пример, а не решение.

<Window.InputBindings>
  <KeyBinding Command="ApplicationCommands.Open" Gesture="ALT+P" />
</Window.InputBindings>

Это еще не все, но вы достаточно легко с этим справитесь. Это способ работы с ключами в WPF!

PK: -)

3
ответ дан 14 December 2019 в 19:10
поделиться

Вам нужно выполнить «побитовое и» с помощью 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 ...

2
ответ дан 14 December 2019 в 19:10
поделиться

MSDN дает нам этот пример :

if(e.Key == Key.P && e.Modifiers == Keys.Alt)

это работает для вас?

0
ответ дан 14 December 2019 в 19:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: