RoutedEventArgs.OriginalSource プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
イベントを発生させたオブジェクトへの参照を取得します。 これは多くの場合、アプリ UI で宣言された要素ではなく、コントロールのテンプレート部分です。
public:
property Platform::Object ^ OriginalSource { Platform::Object ^ get(); };
IInspectable OriginalSource();
public object OriginalSource { get; }
var object = routedEventArgs.originalSource;
Public ReadOnly Property OriginalSource As Object
プロパティ値
イベントを発生させたオブジェクト。
注釈
ルーティング イベントがイベント ルートをバブルアップすると、 sender はイベント発生オブジェクトと同じオブジェクトではなくなります。 sender は、呼び出されたハンドラーがアタッチされているオブジェクトです。
場合によっては、注目されるのは sender ではなく、ポインター イベントが発生したときにどの子オブジェクトにポインターが置かれているかや、ユーザーがキーボードのキーを押したときに上位の UI のどのオブジェクトにフォーカスがあったかなどの情報です。 そのような場合には、OriginalSource プロパティの値を利用できます。 OriginalSource は、ルートのすべての位置で、ハンドラーがアタッチされているオブジェクトではなく、イベントを発生させた元のオブジェクトを報告します。 ただし、UIElement の入力イベントでは、そのイベント発生元のオブジェクトはページ レベルの UI 定義 XAML ですぐに見つかるオブジェクトではありません。 コントロールのテンプレート パーツである場合もよくあります。 たとえば、ユーザーが Button の端にポインターをホバーした場合、ほとんどのポインター イベントでは、OriginalSource は Button そのものではなく、Template の Border テンプレート パーツになります。 したがって、XAML ページ レベルの UI 定義で明示的に宣言したオブジェクトを表す OriginalSource に常に依存できるとは限りません。
ヒント
入力イベント バブリングは、テンプレート 化されたコントロールを作成する場合に特に便利です。 テンプレート化されたすべてのコントロールでは、ユーザーによって新しいテンプレートが適用される可能性があるためです。 作業テンプレートを再作成しようとしているユーザーによって、既定のテンプレートで宣言されているイベント処理が誤って削除される可能性もあるためです。 そのような場合でも、クラス定義内でオーバーライドした OnApplyTemplate の一部としてハンドラーをアタッチすることで、コントロール レベルのイベント処理を提供できます。 これにより、インスタンス化時にコントロールのルートまでバブル ルーティングされる入力イベントをキャッチできます。