UIElement.AddHandler(RoutedEvent, Object, Boolean) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定したルーティング イベントのルーティング イベント ハンドラーを追加します。このハンドラーは、現在の要素のハンドラー コレクションに追加されます。 イベントが他の場所で処理される場合でも、指定されたハンドラーを呼び出すように を 指定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 ランタイム イベント システムの意図された設計に干渉するため、ルーティング イベントの再処理を定期的に要求しないでください。
例
この例では、 と を 使用してイベント ハンドラーを結び付AddHandler
handledEventsToo
けるための基本的な構文を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
は特にルーティング イベント用であり、主に を としてtrue
渡handledEventsToo
すことによって有効になる特定のシナリオを対象としています。 詳しくは、「イベントとルーティング イベントの概要」をご覧ください。
ルーティング イベント識別子
ルーティング イベント識別子は通常、 UIElement の静的プロパティ メンバーです。 たとえば、 KeyUp イベントのハンドラーを追加するには、このパラメーターに KeyUpEvent を渡します。 この識別子を持つWindows ランタイムイベントはごくわずかです。UIElement のルーティング イベントにのみ、この使用に使用できる識別子 API があります。 これらは一般に、ポインター レベル、ジェスチャ レベル、操作レベルなど、さまざまなレベルの入力アクションに関連するイベントです。 また、キー入力イベントは、この方法で処理できます。
ルーティング イベント識別子を公開するルーティング イベントの一覧を次に示します。そのため、呼び出しによって登録されたハンドラーによって AddHandler
処理できます。
- DoubleTapped
- DragEnter
- DragLeave
- DragOver
- Drop
- 株式公開状況
- KeyDown
- KeyUp
- ManipulationCompleted
- ManipulationDelta
- ManipulationInertiaStarting
- ManipulationStarted
- ManipulationStarting
- PointerCanceled
- PointerCaptureLost
- PointerEntered
- PointerExited
- PointerMoved
- PointerPressed
- PointerReleased
- PointerWheelChanged
- RightTapped
- Tapped
ハンドラー パラメーター
パラメーターは handler
型指定されていないパラメーターですが、目的のイベントに固有のハンドラー メソッドを参照する新しいデリゲートを指定する必要があります。 たとえば、 KeyUp イベントを処理する場合は、そのデリゲート シグネチャに基づくメソッドを参照する新しい KeyEventHandler インスタンスを KeyEventHandler
渡します。 これには逆参照が必要です。逆参照構文は、使用している言語によって異なります。 このトピックの例を参照してください。
handledEventsToo を使用するタイミング
低レベルの入力イベントを実用的な方法で処理することは、複雑な作業です。 多くのコントロールは、特定のイベントが処理済みとしてマークされ、別のより直感的なイベントに置き換えられる動作を実装します。 一般に、コントロールは、何らかの設計上の意図がある場合にのみ、ルーティング イベントを処理済みとしてマークします。 ただし、特定のシナリオでは、これらの設計上の意図が、入力イベントの特定の処理に必要なものではありません。 これらのシナリオでは、適切なハンドラーtrue
を にhandledEventsToo
登録します。 しかし、これを日常的に行うべきではありません。 処理された場合でも、すべてのイベントに応答してハンドラーを呼び出すと、独自のアプリのイベント処理ロジックが複雑になります。 ハンドラー ロジックが大きい場合は、パフォーマンスが低下する可能性があります。 ハンドラーは、アプリ ロジックで処理するイベントを処理する特定のコントロールが検出された場合にのみ、既に処理されたイベントにアタッチする必要があります。
コントロールのクラス処理動作を回避するためのもう 1 つの手法は、そのコントロールをサブクラス化し、その OnEvent メソッドをオーバーライドすることです。これは、コントロールがイベントを処理済みとしてマークする事前構成済みのオーバーライドです。 ただし、これも複雑になる可能性があります。 基本実装ではイベントが処理済みとしてマークされるため、基本実装を呼び出さずにコントロールの処理実装を再現する必要がある場合があります。 詳しくは、「イベントとルーティング イベントの概要」をご覧ください。