UIElement.AddHandler(RoutedEvent, Object, Boolean) メソッド

定義

指定したルーティング イベントのルーティング イベント ハンドラーを追加し、現在の要素のハンドラー コレクションにハンドラーを追加します。 イベントが他の場所で処理される場合でも、指定されたハンドラーを呼び出すようにhandledEventsTooとしてtrueを指定します。

public:
 virtual void AddHandler(RoutedEvent ^ routedEvent, Platform::Object ^ handler, bool handledEventsToo) = AddHandler;
void AddHandler(RoutedEvent const& routedEvent, IInspectable const& handler, bool const& handledEventsToo);
public void AddHandler(RoutedEvent routedEvent, object handler, bool handledEventsToo);
function addHandler(routedEvent, handler, handledEventsToo)
Public Sub AddHandler (routedEvent As RoutedEvent, handler As Object, handledEventsToo As Boolean)

パラメーター

routedEvent
RoutedEvent

処理するルーティング イベントの識別子。

handler
Object

Platform::Object

IInspectable

ハンドラー実装への参照。

handledEventsToo
Boolean

bool

true ルーティング イベントがイベント データで処理済みとしてマークされている場合でも呼び出されるようにハンドラーを登録する場合。

false ルーティング イベントが既に処理済みとしてマークされている場合に呼び出されない既定の条件でハンドラーを登録する場合。 既定値は false です。

ルーティング イベントは、制御合成のWindows ランタイム イベント システムの意図された設計に干渉するため、定期的に再処理を要求しないでください。

この例では、イベント ハンドラーをtrueとしてAddHandlerおよびhandledEventsTooに接続するための基本的な構文を示します。 この場合、ワイヤードされているイベントは タップされます。 ハンドラーをワイヤ化する一般的な場所は、ページに 対して読み込まれる か、テンプレート化されたコントロールの 場合は OnApplyTemplate です。

void MainPage::pageRoot_Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
{
     //implementation
}
void MainPage::pageRoot_Loaded(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
     this->AddHandler(UIElement::TappedEvent, ref new TappedEventHandler(this, &MainPage::pageRoot_Tapped), true);
}
private void pageRoot_Tapped(object sender, TappedRoutedEventArgs e)
{
    //implementation
}
private void pageRoot_Loaded_1(object sender, RoutedEventArgs e)
{
    this.AddHandler(UIElement.TappedEvent, new TappedEventHandler(pageRoot_Tapped), true);
}

注釈

AddHandlerを、イベント ハンドラーの配線に通常使用する言語固有の構文の一般的な代替として使用しないでください。すべてのイベントにroutedEventとして渡すことができる識別子がないため、機能しません。 AddHandler は特にルーティング イベント用であり、主に handledEventsTootrueとして渡すことによって有効になる特定のシナリオを対象としています。 詳しくは、「イベントとルーティング イベントの概要」をご覧ください。

ルーティング イベント識別子

ルーティング イベント識別子は、通常、 UIElement の静的プロパティ メンバーです。 たとえば、 KeyUp イベントのハンドラーを追加するには、このパラメーターに KeyUpEvent を渡します。 この識別子を持つWindows ランタイムイベントの数はごくわずかです。UIElement のルーティング イベントにのみ、この使用に使用できる識別子 API があります。 これらは一般に、ポインター レベル、ジェスチャ レベル、操作レベルなど、さまざまなレベルの入力アクションに関連するイベントです。 また、キー入力イベントは、この方法で処理できます。

ルーティング イベント識別子を公開するルーティング イベントの一覧を次に示します。そのため、 AddHandler 呼び出しによって登録されたハンドラーによって処理できます。

ハンドラー パラメーター

handler パラメーターは型指定されていないパラメーターですが、目的のイベントに固有のハンドラー メソッドを参照する新しいデリゲートを指定する必要があります。 たとえば、KeyUp イベントを処理する場合は、そのKeyEventHandlerデリゲート シグネチャに基づくメソッドを参照する新しい KeyEventHandler インスタンスを渡します。 これには逆参照が必要であり、逆参照構文は使用している言語によって異なります。 このトピックの例を参照してください。

handledEventsToo を使用するタイミング

低レベルの入力イベントを実際の方法で処理するのは複雑な作業です。 多くのコントロールは、特定のイベントが処理済みとしてマークされ、別のより直感的なイベントに置き換えられる動作を実装します。 一般に、コントロールはルーティング イベントを処理済みとしてマークします。これは、何らかの設計上の意図がある場合のみです。 ただし、特定のシナリオでは、これらの設計上の意図が、入力イベントの特定の処理に必要なものではありません。 これらのシナリオでは、ハンドラーをhandledEventsTooとしてtrueに登録することが適切です。 ただし、これを日常的に行うべきではありません。 処理された場合でも、すべてのイベントに応答してハンドラーを呼び出すと、独自のアプリのイベント処理ロジックが複雑になります。 ハンドラー ロジックが大きい場合は、パフォーマンスが低下する可能性があります。 ハンドラーは、アプリ ロジックで処理するイベントを特定のコントロールが処理していることを検出した場合にのみ、既に処理されているイベントにアタッチする必要があります。

コントロールのクラス処理動作を回避するもう 1 つの手法は、そのコントロールをサブクラス化し、その OnEvent メソッドをオーバーライドすることです。これは、コントロールがイベントを処理済みとしてマークする事前構成済みのオーバーライドです。 ただし、これも複雑になる可能性があります。 基本実装ではイベントが処理済みとしてマークされるため、基本実装を呼び出さずにコントロールの処理実装を再現しなければならない場合があります。 詳しくは、「イベントとルーティング イベントの概要」をご覧ください。

適用対象

こちらもご覧ください