我的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
?
答案 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