Ответ 1
В дополнение к ответу Yacoder для проверки клавиши F10 используйте следующую команду:
case Key.System:
if (e.SystemKey == Key.F10)
{
// logic...
}
Свойство SystemKey сообщит вам, какая клавиша системы была нажата.
В моем приложении 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
?
В дополнение к ответу Yacoder для проверки клавиши F10 используйте следующую команду:
case Key.System:
if (e.SystemKey == Key.F10)
{
// logic...
}
Свойство SystemKey сообщит вам, какая клавиша системы была нажата.
F10 запускает меню окна. Это то же самое во всех приложениях Windows.
Кажется, что Key.System
- ожидаемое значение для ключа F10.
Ответ на 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)
{
...
}
}
Это сработало для меня, для 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