我开发的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 = 99
,System = 156
,所以我可以排除它是重复的枚举值(例如PageDown = Next = 20
)。
那么,如何判断用户何时按下F10?
检查Key.System
是否安全?这感觉有点不好 - 是否可能Key.System
会因为按下其他键而产生?或者是不是有某个设置可以使F10报告为Key.F10
?
e.Key == Key.System
时,我也需要设置e.Handled = true
,以确保焦点不会停留在控制框上。(由于我使用了WindowStyle = None
,所以我的应用程序中的控制框是不可见的,这使得默认的F10行为对用户来说更加困惑。)此外,当用户按下Alt键时,e.Key == Key.System
也成立 - 也许在其他一些情况下也是如此 - 所以使用e.SystemKey
绝对是正确的方式,而不仅仅假设它是F10。谢谢! - teedyay