2015-06-19 223 views
1

我正在使用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的情況下,但它沒有幫助。

回答

3

用途:

else if..... 

在你的情況這兩個選項被解僱,因爲你按在這兩種情況下F1鍵。

1

使用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

1

我認爲你正在尋找Keyboard.Modifiers

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

不錯,會用它 – Dork