次の方法で共有


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

定義

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

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 ランタイム イベント システムの意図された設計に干渉するため、ルーティング イベントの再処理を定期的に要求しないでください。

この例では、 と を 使用してイベント ハンドラーを結び付AddHandlerhandledEventsTooけるための基本的な構文をtrue示します。 この場合、ワイヤードされているイベントは タップされます。 ハンドラーをワイヤ化する一般的な場所は、ページに 対して読み込まれる か、テンプレート化されたコントロールの 場合は 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は特にルーティング イベント用であり、主に を としてtruehandledEventsTooすことによって有効になる特定のシナリオを対象としています。 詳しくは、「イベントとルーティング イベントの概要」をご覧ください。

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

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

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

ハンドラー パラメーター

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

handledEventsToo を使用するタイミング

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

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

適用対象

こちらもご覧ください