Sto lavorando a un gioco, un'app di Windows Store basata su WPF e scritta in C#. Quando il giocatore preme il tasto Esc, voglio mettere in pausa il gioco e mostrare un menu (Continua, Esci ecc.).Eventi tastiera globali della pagina nelle app di Windows Store
Suoni semplici. Purtroppo, non lo è.
Il gioco si svolge in un Windows.UI.Xaml.Controls.Page
ed è costituito principalmente da centinaia di Shape
s in un Canvas
, ma nessuna singola Button
, TextBox
o qualsiasi altra cosa che supporta l'interazione della tastiera. L'unica interazione è fare clic o toccare forme.
Ho bisogno di catturare gli eventi della tastiera, a livello globale per l'intera pagina, indipendentemente dall'elemento che ha lo stato attivo o se c'è persino una messa a fuoco ecc. Ogni volta che viene premuto il tasto Esc, un evento deve essere attivato.
Quello che ho cercato:
Utilizzando l'evento
Page.KeyDown
o preponderantePage.OnKeyDown(KeyRoutedEventArgs e)
(o KeyUp): Non sparare, a meno che non ci sia un elemento, ad esempio unTextBox
con il fuoco della tastiera. Ma nella mia interfaccia utente non esiste un elemento del genere.Utilizzando un invisibile (
Opacity = 0
e/o nascosto sotto il Canvas) TextBox come un trucco per rendere il lavoro KeyDown: Non appena la tela di canapa o di qualunque forma è cliccato/sfruttato, il controllo TextBox perde il fuoco e l'hack smette di funzionare. Quindi, sono necessari più hack per mantenere la messa a fuoco, che avvita con altre cose come i pulsanti del menu. Inoltre, il TextBox mostra occasionalmente la tastiera del software Windows, che è piuttosto indesiderata. Un hack a malapena funzionante e fragile.Utilizzo di
InputGestures
,KeyBinding
, ecc .: non disponibile per le app di Windows Store.
Qualche idea o soluzione?
Sembra funzionare, grazie. Domani farò altri test e poi accetterò la tua risposta. –
@SebastianNegraszus - Nessun problema, spero funzioni! – keyboardP