2017-10-17 3 views
0

私はWPFが内部的にルーティングされたイベントによって実装されるルーティングされたコマンドをどのように実装するのかを理解しようとしています。 UIElementクラス定義では、我々は、コードのこの部分を見つける:WPF RoutedCommand/RoutedEvent who/whatはイベントを発生させますか?

EventManager.RegisterClassHandler(type, CommandDevice.CommandDeviceEvent, new 
    CommandDeviceEventHandler(UIElement.OnCommandDeviceThunk), false); 

そこから上、UIElement.OnCommandDeviceThunkハンドラは、それが到達するまで、自身が同じことをしたそのボディに呼び出す関数の引数を介してすべての情報に沿って渡します私たちが購読するCommandBinding.Executedイベントで、レスポンスコードを実行します。

私が見つけられないと理解したいと思うものは、誰がCommandDevice.CommandDeviceEventを提起していますか?

例えば、ButtonBaseサブクラスオブジェクトのCommandプロパティをApplicationCommandsコマンドにリンクした場合、何らかの形でCommandDeviceEventが呼び出され、どのように処理されますか?

私はGlobalEventManagerに多数のイベントハンドラのリストがあることを理解していますが、誰がそれらのハンドラをトリガするイベントを起こしたのかまだ分かりません。

答えて

2
例えば、私はApplicationCommandsコマンドに ButtonBaseサブクラスオブジェクトの Commandプロパティをリンクしている、

、それは何らかの方法でCommandDeviceEventを上げないとどのようにそれを行うのですか?

ButtonBaseクラスは、それがクリックされた内部CommandHelpersクラスのExecuteCommandSourceメソッド呼び出し:https://referencesource.microsoft.com/#PresentationFramework/Framework/System/Windows/Controls/Primitives/ButtonBase.cs,c0949dd81fca07f3,references

この方法は、実際のコマンドを実行し、すなわち、オブジェクトをそのICommandプロパティ戻り値:https://referencesource.microsoft.com/#PresentationFramework/Framework/MS/Internal/Commands/CommandHelpers.cs,518e4547841e704d

関連する問題