2017-03-07 29 views
0

我試圖通過ALT + 9檢測ALT + 1的熱鍵,但是當ALT被按下時,鍵以Key.System的形式出現。當CTRL + NumPad0被按下時,它的鍵是Key.NumPad0,它是正確的。Keys.Numpad0作爲Keys.System,當ALT被按下時

private void MainWindow_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    bool isAlt = Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt); 
    bool isCtrl = Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl); 

    string ctrlMod = string.Empty; 

    if (isAlt) 
    { 
     ctrlMod = "alt + " + e.Key.ToString(); 
    } 

    if (isCtrl) 
    { 
     ctrlMod = "ctrl + " + e.Key.ToString(); 
    } 

    Debug.WriteLine("Key is " + ctrlMod); 
} 

ALT + NUMPAD0通過ALT + NUMPAD9生產:

鍵是Alt +系統

按Ctrl正常工作

鍵是Ctrl + NUMPAD1
鍵是Ctrl + NumPad2
鍵是ctrl + NumPad3

+0

它可能有一些做與Windows Alt鍵代碼 – maccettura

+0

https://social.msdn.microsoft.com/Forums/vstudio/en-US/4355ab9a-9214-4fe1-87ea-b32dfc22946c/issue-with-alt-key-and-key-down-event?for嗯= WPF – maccettura

回答

1

圍繞它得到您可以使用Keyboard.ModifiersKeyEventArgs.SystemKey性能檢測ALT+1通過ALT+9

private void MainWindow_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (Keyboard.Modifiers == ModifierKeys.Alt) 
    { 
     string ctrlMod = "alt + " + e.SystemKey.ToString(); 
     Debug.WriteLine("Key is " + ctrlMod); 
    } 
} 

private void MainWindow_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    bool isAlt = Keyboard.Modifiers == ModifierKeys.Alt; 
    bool isCtrl = Keyboard.Modifiers == ModifierKeys.Control; 

    string ctrlMod = string.Empty; 

    if (isAlt) 
    { 
     ctrlMod = "alt + " + e.SystemKey.ToString(); 
    } 

    if (isCtrl) 
    { 
     ctrlMod = "ctrl + " + e.Key.ToString(); 
    } 

    Debug.WriteLine("Key is " + ctrlMod); 
} 
0

我認爲maccettura是正確的,它與'Windows Alt代碼'有關。我可以用

if (Keyboard.IsKeyDown(Key.NumPad0)) { }