2013-05-21 9 views
7

Qual è la differenza tra KeyEventArgs.systemKey e KeyEventArgs.Key? Va bene per intrappolare l'evento della pressione dei tasti nella classe UsControl di WPF come mostrato di seguito.Differenza tra KeyEventArgs.systemKey e KeyEventArgs.Key

protected override void OnKeyDown(KeyEventArgs e) 
    { 
     base.OnKeyDown(e); 

     if(e.SystemKey == Key.LeftAlt || e.SystemKey == Key.LeftCtrl || e.SystemKey == Key.RightAlt) 
     { 
      this.Focus(); 
      CloseAnyOpenPopups(); 
     } 
    } 

Grazie

risposta

6

Perché il tasto Alt sarà gestita dal sistema utilizzando e.SystemKey è l'unica possibilità per scoprire se è stato premuto Alt. La proprietà Key restituirebbe solo Key.System.

per essere sicuri di ottenere sempre la chiave giusta si potrebbe usare questa espressione:

Key key = (e.Key == Key.System ? e.SystemKey : e.Key);