Eventos de teclado global de páginas em aplicativos da Windows Store
Estou trabalhando em um jogo, um aplicativo da Windows Store com base no WPF e escrito em C #. Quando o jogador pressiona a tecla Esc, eu quero pausar o jogo e mostrar um menu (Continuar, Sair, etc.).
Parece simples. Infelizmente, não é.
O jogo acontece em umWindows.UI.Xaml.Controls.Page
e consiste principalmente em centenas deShape
s em umCanvas
, mas nenhum únicoButton
, TextBox
ou qualquer outra coisa que suporte a interação do teclado. A única interação é clicar ou tocar em formas.
Eu preciso pegar eventos de teclado, globalmente para toda a página, não importa qual elemento tenha o foco ou se houver algum foco, etc. Sempre que a tecla Esc é pressionada, um evento precisa ser disparado.
O que eu tentei:
Usando o eventoPage.KeyDown
ou substituindoPage.OnKeyDown(KeyRoutedEventArgs e)
(ou KeyUp): Não dispara, a menos que haja um elemento como umTextBox
com foco no teclado. Mas na minha interface do usuário não existe tal elemento.
Usando um invisível (Opacity = 0
e / ou escondido sob o Canvas) TextBox como um hack para fazer KeyDown funcionar: Assim que o Canvas ou qualquer Shape for clicado / tocado, o TextBox perde o foco e o hack pára de funcionar. Assim, mais hacks são necessários para manter o foco, o que atrapalha com outras coisas, como os botões do menu. Além disso, o TextBox ocasionalmente mostra o teclado do software do Windows, que é bastante indesejado. Um hack frágil e mal trabalhado.
UsandoInputGestures
, KeyBinding
etc .: Não disponível para aplicativos da Windows Store.
Alguma idéia ou solução?