私は、WPF に基づいて C# で記述された Windows ストア アプリであるゲームに取り組んでいます。プレイヤーが Esc キーを押したときに、ゲームを一時停止してメニュー (続行、終了など) を表示したい。
シンプルに聞こえます。悲しいことに、そうではありません。
ゲームは で行われ、主に内Windows.UI.Xaml.Controls.Page
の数百の で構成されますが、キーボード操作をサポートする単一のやその他のものはありません。唯一の操作は、図形をクリックまたはタップすることです。Shape
Canvas
Button
TextBox
どの要素にフォーカスがあるか、またはフォーカスがあるかどうかなどに関係なく、ページ全体でグローバルにキーボード イベントをキャッチする必要があります。Esc キーが押されるたびに、イベントが発生する必要があります。
私が試したこと:
イベント
Page.KeyDown
またはオーバーライドPage.OnKeyDown(KeyRoutedEventArgs e)
(または KeyUp) の使用:TextBox
キーボード フォーカスのある などの要素がない限り、発生しません。しかし、私の UI にはそのような要素はありません。非表示(
Opacity = 0
および/またはキャンバスの下に非表示) の TextBox をハックとして使用して KeyDown を機能させる: キャンバスまたは任意のシェイプをクリック/タップするとすぐに、TextBox はフォーカスを失い、ハックは機能しなくなります。そのため、フォーカスを維持するには、さらにハックが必要です。これにより、メニュー ボタンなどの他の要素がねじ込まれます。さらに、TextBox に Windows ソフトウェア キーボードが表示されることがありますが、これはかなり望ましくありません。ほとんど機能しない脆弱なハック。InputGestures
などの使用KeyBinding
: Windows ストア アプリでは使用できません。
アイデアや解決策はありますか?