RoutedEventArgs.OriginalSource プロパティ

定義

イベントを発生させたオブジェクトへの参照を取得します。 これは多くの場合、アプリ 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

プロパティ値

Object

Platform::Object

IInspectable

イベントを発生させたオブジェクト。

注釈

ルーティング イベントがイベント ルートをバブルアップすると、 sender はイベント発生オブジェクトと同じオブジェクトではなくなります。 sender は、呼び出されたハンドラーがアタッチされているオブジェクトです。

場合によっては、注目されるのは sender ではなく、ポインター イベントが発生したときにどの子オブジェクトにポインターが置かれているかや、ユーザーがキーボードのキーを押したときに上位の UI のどのオブジェクトにフォーカスがあったかなどの情報です。 そのような場合には、OriginalSource プロパティの値を利用できます。 OriginalSource は、ルートのすべての位置で、ハンドラーがアタッチされているオブジェクトではなく、イベントを発生させた元のオブジェクトを報告します。 ただし、UIElement の入力イベントでは、そのイベント発生元のオブジェクトはページ レベルの UI 定義 XAML ですぐに見つかるオブジェクトではありません。 コントロールのテンプレート パーツである場合もよくあります。 たとえば、ユーザーが Button の端にポインターをホバーした場合、ほとんどのポインター イベントでは、OriginalSource は Button そのものではなく、TemplateBorder テンプレート パーツになります。 したがって、XAML ページ レベルの UI 定義で明示的に宣言したオブジェクトを表す OriginalSource に常に依存できるとは限りません。

ヒント

入力イベント バブリングは、テンプレート 化されたコントロールを作成する場合に特に便利です。 テンプレート化されたすべてのコントロールでは、ユーザーによって新しいテンプレートが適用される可能性があるためです。 作業テンプレートを再作成しようとしているユーザーによって、既定のテンプレートで宣言されているイベント処理が誤って削除される可能性もあるためです。 そのような場合でも、クラス定義内でオーバーライドした OnApplyTemplate の一部としてハンドラーをアタッチすることで、コントロール レベルのイベント処理を提供できます。 これにより、インスタンス化時にコントロールのルートまでバブル ルーティングされる入力イベントをキャッチできます。

適用対象

こちらもご覧ください