使用WPF KeyDown事件的多个键

使用WPF KeyDown事件的多个键

问题描述:

我正在使用WPF KeyDown事件(来自Windows.Input的KeyEventArgs)。我需要识别何时用户单独按下F1和Ctrl + F1。使用WPF KeyDown事件的多个键

private void Window_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key==Key.F1 && Keyboard.IsKeyDown(Key.LeftCtrl)) 
     { 
      MessageBox.Show("ctrlF1"); 
     } 
     if (e.Key == Key.F1 && !Keyboard.IsKeyDown(Key.LeftCtrl)) 
     { 
      MessageBox.Show("F1"); 
     } 
    } 

我的问题是,当我按Ctrl + F1平原F1消息框也会触发。我试图添加e.Handled Ctrl + F1的情况下,但它没有帮助。

用途:

else if..... 

在你的情况这两个选项被解雇,因为你按在这两种情况下F1键。

使用if和else否则所有条件都得到评估。

private void Window_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key==Key.F1 && Keyboard.IsKeyDown(Key.LeftCtrl)) 
     { 
      MessageBox.Show("ctrlF1"); 
     } 
     else if (e.Key == Key.F1 && !Keyboard.IsKeyDown(Key.LeftCtrl)) 
     { 
      MessageBox.Show("F1"); 
     } 
    } 
+0

作品。但仍然不明白为什么它会引发我的情况。当我按下F1 Ctrl时,那么!Keyboard.IsKeyDown(Key.LeftCtrl)应该是假的 – Dork

我认为你正在寻找Keyboard.Modifiers

if ((Keyboard.Modifiers & ModifierKeys.Control) > 0) 
{ 
    button1.Background = Brushes.Red; 
} 
else 
{ 
    button1.Background = Brushes.Blue; 
} 
+0

不错,会用它 – Dork