Обнаружение пользователя, нажимающего F10 в WPF

В моем приложении WPF действует поведение, вызванное клавишами функций (F1 - F12).

Мой код указан в следующих строках:

private void Window_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.Key)
    {
        case Key.F1:
        ...
        case Key.F2:
        ...
    }
}

Это работает для всех F-клавиш, кроме F10. Отладка, я нахожу, что e.Key == Key.System, когда пользователь нажимает F10.

В определении перечисления F10 = 99 и System = 156, поэтому я могу исключить его как повторяющееся значение перечисления (например, PageDown = Next = 20).

Итак, как мне сказать, когда пользователь нажимает F10?

Можно ли проверить вместо Key.System? Это кажется немного грязным - возможно ли, что Key.System когда-нибудь возникнет из-за нажатия какого-либо другого ключа? Или есть какая-то настройка где-нибудь, что сделает отчет F10 как Key.F10?

Ответы

Ответ 1

В дополнение к ответу Yacoder для проверки клавиши F10 используйте следующую команду:

case Key.System:
  if (e.SystemKey == Key.F10)
  {
    // logic...
  }

Свойство SystemKey сообщит вам, какая клавиша системы была нажата.

Ответ 3

Ответ на DataContext:



    public partial class BankView : UserControl
    {
        public BankView()
        {
            InitializeComponent();

            this.KeyDown += new KeyEventHandler(BankView_KeyDown);
        } 

        private void BankView_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                switch (e.Key)
                {
                    case Key.F4:
                        ((BankViewModel)DataContext).OpenAccount();
                        break;
                }
            }
            catch (Exception ex)
            {
                ...
            }
        }

Ответ 4

Это сработало для меня, для F1

Private Sub Window_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    If (e.Key = Key.F1) Then
        ShowHelp()
    End If
End Sub