Глобальные события клавиатуры в приложениях Магазина Windows
я работаю над игрой, приложением для Магазина Windows, основанным на WPF и написанным на C #. Когда игрок нажимает клавишу Esc, я хочу приостановить игру и показать меню (Продолжить, Выйти и т. Д.).
Звучит просто. К сожалению, этонет.
Действие игры происходит вWindows.UI.Xaml.Controls.Page
и в основном состоит из сотенShape
вCanvas
, но ни одного,Button
TextBox
или что-нибудь еще, что поддерживает взаимодействие с клавиатурой. Единственное взаимодействие - нажатие или постукивание по фигурам.
Мне нужно отлавливать события клавиатуры, глобально для всей страницы, независимо от того, какой элемент имеет фокус или есть ли вообще какой-либо фокус и т. Д. При каждом нажатии клавиши Esc событие должно срабатывать.
Что я пробовал:
Использование событияPage.KeyDown
или переопределениеPage.OnKeyDown(KeyRoutedEventArgs e)
(или KeyUp): не срабатывает, если нет элемента, такого какTextBox
с фокусом клавиатуры. Но в моем пользовательском интерфейсе такого элемента нет.
Использование невидимого (Opacity = 0
и / или скрытые под Canvas) TextBox в качестве хака для обеспечения работы KeyDown: как только Canvas или любая Shape нажата / нажата, TextBox теряет фокус, и хак перестает работать. Таким образом, требуется больше хаков, чтобы держать его в фокусе, что связано с другими вещами, такими как кнопки меню. Кроме того, TextBox иногда показывает программную клавиатуру Windows, что довольно нежелательно. Едва работающий, хрупкий взломать.
С помощью ,InputGestures
KeyBinding
и т.д .: Недоступно для приложений Магазина Windows.
Есть идеи или решения?