2009-06-05 10 views
1

Silverlight 2アプリケーションで発生するキーストロークをキャプチャしようとしています。入力フィールドはありません。私はゲームを書いており、矢印キーのどれが押されているかを知る必要があります。イベントハンドラでこれらをキャプチャする方法に関する私のベストな推測は成功しません。どんな勧告?Silverlightアプリケーションでキーストロークをキャプチャするにはどうすればよいですか?

答えて

1

もう一度お会いできてうれしいです(事実上)。

ルートUserControl要素でKeyDownの配線をすでに試しているとします。いくつかのヒントがあります:

  • 重要なイベントが表示される前に、プラグインのフォーカスが必要です。あなたはプラグインをクリックして起動させる必要があります。

  • 矢印キーイベントを食べている別の要素(ScrollViewerなど)がないことを確認してください。プレイ中のScrollViewerをお持ちの場合は、KeyUpのみが表示されます。

  • フルスクリーンモードに切り替えません。

このような単純なものでなければなりません。希望が役立ちます。

+0

私はこれらの落とし穴のすべてを回避したと思います。ここに私のコードは次のとおりです。 名前空間ClickTheButton { \t公共部分クラスのLevel10:ユーザーコントロール \t { \t \t公共Level10() \t \t { \t \t \t //必要な変数 \t \t \tのInitializeComponent()を初期化します。 \t \t \tロード済み=新しいRoutedEventHandler(Level10_Loaded); Level10_Loaded \t \t} \t \tボイド(オブジェクト送信者、RoutedEventArgs e)の \t \t { \t \t \t LayoutRoot。KeyDown + =新しいKeyEventHandler(LayoutRoot_KeyDown); \t \t} \t \t空隙LayoutRoot_KeyDown(オブジェクト送信者、KeyEventArgs E) \t \t { \t \t \t(e.Key == Key.Right) \t \t \t { \t \t \t \t //ない場合このキーがすべきこと。 \t \t \t} \t \t} \t}} –

+1

うわ良く貼り付け+切断しないこと。 –

+0

私はここKeyDownイベントハンドラを添付しています: LayoutRoot.KeyDown + =新しいKeyEventHandler(LayoutRoot_KeyDown)。 そして、イベント処理方法では、私はちょうどEのキー値を評価しています。しかし、私のイベント処理メソッドも呼び出されていないばかりん(と私は私のSilverlightのアプリにフォーカスを与えている確信している。) –

0

ルートグリッドでKeyDownまたはKeyUpイベントを処理します。

0

Silverlight 2はKeyUpとKeyDownイベントをサポートしています(KeyPressではなく、私は信じています)。

これらのイベントでは、KeyEventArgsオブジェクトをパラメータとして取得します。これでKeyCodeまたはKeyDataを取得できます。

0

この問題に関して異なるフォーラムのいくつかのスレッドを見直すと、ページ(ルート)要素でキーイベントを処理し、目的の効果のキーを解析し、コマンドを特定のコントロールにリダイレクトするのが最善のようです。

ページ

this.KeyDown += (s, e) => 
    { 
     MyControl control = (MyControl)Layoutroot.FindName("controlname"); 
     if(control != null) 
     { 
      control.MyPublicFunction(e.Key); 
     } 
    }; 

MyControlと

public MyPublicFunciton(Key pressedKey) 
{ 
    if(pressedKey == Key.Enter) 
    { 
     //Do something 
    } 
} 
関連する問題