3

C#とXAMLを使用して、Windowsストア用のゲームを作成しています。私のすべてのゲームオブジェクトには、ビューを説明するキャンバスがあります。これらのキャンバスは、キャンバス(gameRoot)に表示されます。

プレーヤーが押したキーに基づいてプレーヤーを動かしたい(たとえば、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>

イベントハンドラーにブレークポイントを作成しましたが、KeyDownイベントが発生しません。いくつかのグーグルの後、Canvasイベントにボタンを作成するとイベントが発生することがわかりました。しかし、削除してもイベントは発生しません。ボタンの外のどこかをクリックすると、イベントは二度と発生しません。

私の質問は、どの要素にフォーカスがあるかに関係なく、ページ内のキーを押すたびに起動するキーボードイベントハンドラーを作成するにはどうすればよいですか?

4

3 に答える 3

4

Window.Current.CoreWindow.KeyDown/Up イベントをサブスクライブできます。

于 2012-10-01T19:25:14.507 に答える
1

フォーカスに関係なく、ページ全体でキー プレス イベントを処理する場合。次の c# コードをコンストラクターに追加します。

Window.Current.CoreWindow.KeyDown += CoreWindow_KeyDown;

これにより、ページで発生するすべての keyDown イベントにサブスクライブします。もちろん、ハンドラーを追加します。

void CoreWindow_KeyDown(Windows.UI.Core.CoreWindow sender,     Windows.UI.Core.KeyEventArgs args)
    {
        //Do Something Here.

    }

KeyUp イベントについても同じことができます。

于 2015-09-10T16:56:19.110 に答える
0

少し前に同様の問題で戦った。Canvas の「Focusable」プロパティを true に設定する必要があります。キャンバスにフォーカスを与えるには、キャンバスの Focus() 関数を呼び出す必要があります。

MSDN Focus Overviewを参照してください。

于 2012-10-01T19:26:03.940 に答える