2015-09-25 6 views
9

Ich möchte eine Tastenkombination (z. B. Control-A) in einer Windows-Anwendung erkennen. Der KeyDown Event-Handler hat Informationen über die letzte gedrückte Taste. Aber wie finde ich heraus, ob auch die Strg-Taste gedrückt wurde?Get Keyboard-Status in Universal Windows-Anwendungen

+0

Normalerweise tun Sie 'KeyPressed == Control | A' – kevintjuh93

+0

@KevinKal Danke. Aber ich habe es versucht. Es war nur "A". – ispiro

+0

Die Steuerung ist ein Systemschlüssel, daher wird sie anders protokolliert. Ich bin nicht sicher, wie es gemacht wird, aber das ist das Problem, das Sie sehen – rmn36

Antwort

17

Sie CoreVirtualKeyStates.HasFlag(CoreVirtualKeyStates.Down) verwenden können, um zu bestimmen, ist die Ctrl Taste gedrückt wurde, so -

Window.Current.CoreWindow.KeyDown += (s, e) => 
{ 
    var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control); 
    if (ctrl.HasFlag(CoreVirtualKeyStates.Down) && e.VirtualKey == VirtualKey.A) 
    { 
     // do your stuff 
    } 
}; 
+1

Wenn ich Ihre Frage richtig verstanden habe, abonnieren Sie 'Window.Current.CoreWindow.KeyDown', anstatt das' KeyDown'-Ereignis Ihrer Seite zu abonnieren, wie in meiner Antwort. –

+1

Perfekt! Danke vielmals! – ispiro

6

Sie AcceleratorKeyActivated Ereignis verwenden können, und zwar unabhängig davon, wo der Fokus ist es immer das Ereignis zu erfassen.

public MyPage() 
{ 
    Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated += AcceleratorKeyActivated; 
} 


private void AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args) 
{ 
    if (args.EventType.ToString().Contains("Down")) 
    { 
     var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control); 
     if (ctrl.HasFlag(CoreVirtualKeyStates.Down)) 
     { 
      switch (args.VirtualKey) 
      { 
       case VirtualKey.A: 
        Debug.WriteLine(args.VirtualKey); 
        Play_click(sender, new RoutedEventArgs()); 
        break; 
      } 
     } 
    } 
}