Pracuję nad grą, aplikacją Windows Store opartą na WPF i napisaną w języku C#. Kiedy gracz naciśnie klawisz Esc, chcę zatrzymać grę i wyświetlić menu (Kontynuuj, Wyjdź itp.).Zdarzenia globalnej klawiatury strony w aplikacjach Windows Store
Brzmi prosto. Niestety, nie jest.
Gra odbywa się w Windows.UI.Xaml.Controls.Page
i składa się głównie z setek Shape
s w Canvas
, ale żaden pojedynczy Button
, TextBox
lub cokolwiek innego, co umożliwia interakcję klawiatury. Jedyna interakcja to klikanie lub stukanie w kształty.
Potrzebuję przechwytywać zdarzenia klawiatury, globalnie dla całej strony, bez względu na to, który element ma fokus lub czy w ogóle jest skupienie itd. Po naciśnięciu klawisza Esc wydarzenie musi zostać wywołane.
Co próbowałem:
Korzystanie zdarzenie
Page.KeyDown
lub nadrzędnymPage.OnKeyDown(KeyRoutedEventArgs e)
(lub KeyUp): Nie strzelać, chyba że jest to element, taki jakTextBox
z klawiatury ostrości. Ale w moim interfejsie nie ma takiego elementu.Korzystanie niewidzialny (
Opacity = 0
i/lub ukryte pod płótnie) TextBox jako hack do KeyDown pracę: Jak tylko płótna lub dowolny kształt kliknięciu/podsłuchu, TextBox traci fokus i siekać przestaje działać. Potrzebnych jest więcej hacków, aby skupić się na innych elementach, takich jak przyciski menu. Co więcej, TextBox okazjonalnie pokazuje klawiaturę Windows, która jest raczej niechciana. Ledwie działający, delikatny hack.Korzystanie z
InputGestures
,KeyBinding
itp .: Niedostępne dla aplikacji Sklepu systemu Windows.
Wszelkie pomysły lub rozwiązania?
Wydaje się działać, dziękuję. Zrobię więcej testów jutro, a następnie zaakceptuję twoją odpowiedź. –
@SebastianNegraszus - Nie ma problemu, mam nadzieję, że działa! – keyboardP