2015-09-25 22 views
9

Bir Windows uygulamasında bir tuş bileşimini (ör. Control-A) bulmak istiyorum. KeyDown olay işleyicisinin, son tuşa basılması hakkında bilgi vardır. Ancak, Control tuşunun da basılıp basılmadığını nasıl anlarım? Belirlemek için CoreVirtualKeyStates.HasFlag(CoreVirtualKeyStates.Down) kullanabilirsinizEvrensel Windows Uygulamalarında Klavye Durumu alın

+0

Normalde 'KeyPressed == Control | A' – kevintjuh93

+0

@KevinKal Teşekkürler. Ama bunu denedim. Sadece "A" idi. – ispiro

+0

Kontrol sistem anahtarıdır, böylece farklı bir şekilde oturum açar. Nasıl yapıldığından emin değilim ama bu, – rmn36

cevap

17

Ctrl anahtar böyle, preslenmiş olan -

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

'da hiç çalışmamıştım Sorunuzu doğru anlıyorsam, sayfanızın 'KeyDown' etkinliğine abone olmak yerine, 'Window.Current.CoreWindow.KeyDown' cevabımdaki gibi abone olun. –

+1

Mükemmel! Çok teşekkürler! – ispiro

6

Odaklama her zaman olayı yakalayacaktır olduğu edilse bile AcceleratorKeyActivated olayını kullanabilirsiniz.

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; 
      } 
     } 
    } 
} 
İlgili konular