Я создаю игру для Windows Store, используя C# и XAML. Все мои игровые объекты имеют холст, который описывает их представление. Эти холсты будут отображаться на холсте (gameRoot).Работа с клавиатурой в окнах 8 Игра на основе XAML
Я хочу переместить моего игрока на основе нажатого им ключа (например, W идет вверх). Вот моя страница дисплея:
<Page
x:Class="Labyrinth_XAML.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Labyrinth_XAML"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Canvas x:Name="gameRoot" KeyDown="gameRoot_KeyDown_1">
<Button>Vakanu</Button>
</Canvas>
</Page>
Я создал контрольную точку в моем EventHandler и KeyDown событие не срабатывает. После некоторого google, я понял, если я создам кнопку в моем событии Canvas, это будет срабатывать. Но если я удалю, событие не будет срабатывать. Если я выйду из любой кнопки, событие больше не будет срабатывать.
Мой вопрос: как я могу создать обработчик событий клавиатуры, который срабатывает каждый раз, когда я нажимаю клавишу на странице, не зависимо от того, какой элемент имеет фокус?
+1. Да, ловить ключевые события глобально, а не привязаны к определенному контролю, более подходит для игр. Обратите внимание, однако, что обработка событий в WPF и WinForms позволяет сразу поймать только одно событие с ключом или мышью. Игровые интерфейсы, такие как Direct X, позволяют одновременно нажать (и поймать) несколько клавиш клавиатуры и мыши. –