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 deShapes 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?

questionAnswers(2)

yourAnswerToTheQuestion