7

keydown単一のウィンドウではなく、ソリューション全体にイベント ハンドラー ( など) を設定するにはどうすればよいですか?

4

5 に答える 5

12

次のように、アプリケーション クラス (App.cs) にグローバル イベント ハンドラーを登録します。

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        EventManager.RegisterClassHandler(typeof(Window), Window.KeyDownEvent, new RoutedEventHandler(Window_KeyDown));
    }

    void Window_KeyDown(object sender, RoutedEventArgs e)
    {
        // your code here
    }
}

これにより、アプリ内KeyDownのすべてのイベントが処理Windowされます。にキャストeKeyEventArgsて、押されたキーに関する情報を取得できます。

于 2012-04-05T11:05:42.443 に答える
3

これはどう:

 public partial class App : Application {
        protected override void OnStartup(StartupEventArgs e) {
            EventManager.RegisterClassHandler(typeof(Window), Window.KeyDownEvent, new RoutedEventHandler(KeyDown));
            base.OnStartup(e);
        }

        void KeyDown(object sender, RoutedEventArgs e) {

        }
    }
于 2012-04-05T11:09:09.937 に答える
0

デリゲートを使用して、イベント (どこにいても) と、イベントがジャンプしたときに喜んで機能する関数を接続する必要があります。

デリゲートに必要な数のイベントをロードできます。

mzE。

于 2012-04-05T10:54:23.843 に答える
0

にフォーカスKeyDownが必要なため、現在のウィンドウでのみ機能しますKeyDown。できることは、すべてのウィンドウにハンドラーを追加し、それらのハンドラーで別のイベントをディスパッチしてから、必要なすべてのクラスをこの新しいイベントに登録することです。

または、Observerパターンを見てください

于 2012-04-05T10:54:34.413 に答える
0

すべてのウィンドウでイベントを登録してグローバル関数/イベントに渡すか、(キーダウンなどの場合) グローバルな「イベントキャッチ」(キーボードのTHISなど) を使用します。

于 2012-04-05T10:54:44.980 に答える