Глобальные события клавиатуры в приложениях Магазина Windows

я работаю над игрой, приложением для Магазина Windows, основанным на WPF и написанным на C #. Когда игрок нажимает клавишу Esc, я хочу приостановить игру и показать меню (Продолжить, Выйти и т. Д.).

Звучит просто. К сожалению, этонет.

Действие игры происходит вWindows.UI.Xaml.Controls.Page и в основном состоит из сотенShapeвCanvas, но ни одного,ButtonTextBox или что-нибудь еще, что поддерживает взаимодействие с клавиатурой. Единственное взаимодействие - нажатие или постукивание по фигурам.

Мне нужно отлавливать события клавиатуры, глобально для всей страницы, независимо от того, какой элемент имеет фокус или есть ли вообще какой-либо фокус и т. Д. При каждом нажатии клавиши Esc событие должно срабатывать.

Что я пробовал:

Использование событияPage.KeyDown или переопределениеPage.OnKeyDown(KeyRoutedEventArgs e) (или KeyUp): не срабатывает, если нет элемента, такого какTextBox с фокусом клавиатуры. Но в моем пользовательском интерфейсе такого элемента нет.

Использование невидимого (Opacity = 0 и / или скрытые под Canvas) TextBox в качестве хака для обеспечения работы KeyDown: как только Canvas или любая Shape нажата / нажата, TextBox теряет фокус, и хак перестает работать. Таким образом, требуется больше хаков, чтобы держать его в фокусе, что связано с другими вещами, такими как кнопки меню. Кроме того, TextBox иногда показывает программную клавиатуру Windows, что довольно нежелательно. Едва работающий, хрупкий взломать.

С помощью ,InputGesturesKeyBinding и т.д .: Недоступно для приложений Магазина Windows.

Есть идеи или решения?

Ответы на вопрос(2)

Ваш ответ на вопрос