检测用户在WPF中按F10

时间:2010-01-20 17:32:56

标签: wpf keyboard-events

我的WPF应用程序具有由功能键触发的行为( F1 - F12 )。

我的代码是这样的:

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

这适用于除 F10 之外的所有F键。调试时,当用户按下 F10 时,我发现e.Key == Key.System

在枚举定义F10 = 99System = 156中,我可以排除它是重复的枚举值(如PageDown = Next = 20)。

那么,如何判断用户何时按 F10

检查Key.System是否安全?这感觉有点脏 - 有可能Key.System会因某些其他键被按下而产生吗?或者是否有某些设置将 F10 报告为Key.F10

4 个答案:

答案 0 :(得分:17)

除了Yacoder的回复,请使用以下内容检查 F10 键:

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

SystemKey属性将告诉您按下了哪个系统键。

答案 1 :(得分:3)

F10 launches the window menu. It's the same in all Windows apps.

似乎Key.System是F10密钥的预期值。

答案 2 :(得分:1)

使用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)
            {
                ...
            }
        }

答案 3 :(得分:-1)

对于 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