2009-08-21 7 views
2

背景:キーボードイベントをキャプチャできるアプリケーションがあります。メイン画面で、ユーザーは「開始」ボタンをクリックします。ゲーム中は、スタートボタンが消え、リセットボタンが表示されます(2つのコントロールの表示が変わります)。これらは、他のすべてがフォーカス不可能なユーザーコントロールであるため、標準コントロールは2つしかありません。Silverlightでのキーイベントのキャプチャ

問題:ユーザーが[開始]をクリックすると、フォーカスが移動して表示され、[リセット]が表示され、[リセット]ボタンが自動的にフォーカスを取得したように見えます。キープレスのイベントは引き続き行われているので、これはひどいことではありませんが、焦点は大きな問題を引き起こします。ユーザーがSpaceを押すと、このボタンはClickイベントをClickイベントとして解釈します。

KeyUpとKeyDownのハンドラをボタン自体に追加し、そのイベントをHandledに設定すると、スペースを押して放してもイベントが飲み込まれますが、タップしただけではイベントは飲み込まれません。

質問:スペースが私のアプリケーションのスペースに応答できるうちに、スペースがボタンをアクティブにしないようにするにはどうすればよいですか?

答えて

1

単純なカスタムコントロールを作成するか、IsHitTestVisible="True"をオンに設定することを検討してください。次に、同じグリッド内のどこかに配置し、キャプチャするキーイベントやその他の入力イベントに接続します。

[目に見えない]コントロールにフォーカスが移動するようにするには、[開始]ボタンを押した後に(yourControlsNameHere).Focus()を呼び出すことができます。

あなたの隠された、フォーカスキャプチャ制御リセットボタン後かの前に置くのいずれかに視覚的/タブ順序で仕事ができます。私は、あなたのユーザーは、アプリケーションのタブで、入力が関連しているフォーカスが当てられていないユーザーコントロールに焦点を当てさせるという考えが気にならないと思います。

+0

ありがとうございます!これは私がやったことです。唯一の副作用は、WindowsがClickイベントを作成するのにスペースバーを使用することができないように思われたことでした。これを回避するために、私はクリックイベントハンドラに接続しました。簡単にするために、私はゼロサイズの境界線とタブ順のリセットボタンの後に1x1サイズの標準ボタンを作成しました。スペースバー/クリックイベントの奇妙さのために、複数のイベントを(簡単にとにかく)受け取るためにスペースバーを押し下げることはできませんが、私のアプリケーションではそれほど悪くはありませんでした。 お返事いただきありがとうございます。 –

関連する問題