ContentElement.AddHandler メソッド

定義

指定したルーティング イベントのルーティング イベント ハンドラーを追加します。このハンドラーは、現在の要素のハンドラー コレクションに追加されます。

オーバーロード

AddHandler(RoutedEvent, Delegate)

指定したルーティング イベントのルーティング イベント ハンドラーを追加します。このハンドラーは、現在の要素のハンドラー コレクションに追加されます。

AddHandler(RoutedEvent, Delegate, Boolean)

指定したルーティング イベントのルーティング イベント ハンドラーを追加します。このハンドラーは、現在の要素のハンドラー コレクションに追加されます。 イベント ルート上の別の要素により既にハンドル済みとしてマークされているルーティング イベントに対し、指定したハンドラーが呼び出されるようにするには、handledEventsTootrue に指定します。

AddHandler(RoutedEvent, Delegate)

指定したルーティング イベントのルーティング イベント ハンドラーを追加します。このハンドラーは、現在の要素のハンドラー コレクションに追加されます。

public:
 virtual void AddHandler(System::Windows::RoutedEvent ^ routedEvent, Delegate ^ handler);
public void AddHandler (System.Windows.RoutedEvent routedEvent, Delegate handler);
abstract member AddHandler : System.Windows.RoutedEvent * Delegate -> unit
override this.AddHandler : System.Windows.RoutedEvent * Delegate -> unit
Public Sub AddHandler (routedEvent As RoutedEvent, handler As Delegate)

パラメーター

routedEvent
RoutedEvent

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

handler
Delegate

ハンドラーの実装に対する参照。

実装

注釈

例外を発生させずに、同じイベントに対して同じハンドラーを複数回追加できます。 ただし、イベントが処理されると、ハンドラーは実際に複数回呼び出されます。 したがって、ハンドラーの実装でこの動作に考慮すべき副作用がある可能性がある方法を検討してください。

通常、このメソッドを使用して、カスタム ルーティング イベントの Microsoft .NET イベント アクセス パターンの "add" アクセサーの実装を提供します。

適用対象

AddHandler(RoutedEvent, Delegate, Boolean)

指定したルーティング イベントのルーティング イベント ハンドラーを追加します。このハンドラーは、現在の要素のハンドラー コレクションに追加されます。 イベント ルート上の別の要素により既にハンドル済みとしてマークされているルーティング イベントに対し、指定したハンドラーが呼び出されるようにするには、handledEventsTootrue に指定します。

public:
 void AddHandler(System::Windows::RoutedEvent ^ routedEvent, Delegate ^ handler, bool handledEventsToo);
public void AddHandler (System.Windows.RoutedEvent routedEvent, Delegate handler, bool handledEventsToo);
member this.AddHandler : System.Windows.RoutedEvent * Delegate * bool -> unit
Public Sub AddHandler (routedEvent As RoutedEvent, handler As Delegate, handledEventsToo As Boolean)

パラメーター

routedEvent
RoutedEvent

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

handler
Delegate

ハンドラーの実装に対する参照。

handledEventsToo
Boolean

イベント データ内でルーティング イベントがハンドル済みとしてマークされている場合でも呼び出されるようにハンドラーを登録するには true。ルーティング イベントが既にハンドル済みとしてマークされている場合はハンドラーを呼び出ないという既定の条件を使用してハンドラーを登録する場合は false

既定値は、false です。

ルーティング イベントの再処理を機械的に要求しないでください。

次の例では、 を使用してhandledEventsTootrue、定義されたハンドラーをInitializedページ上の名前付き要素のいずれかにアタッチするページの イベントで呼び出されるハンドラーを実装します。 ルート内の処理要素に到達する前に、ルート上の別の要素が共有イベント データを処理済みとしてマークした場合でも、このハンドラーが呼び出されます。

void PrimeHandledToo(object sender, EventArgs e)
{
    dpanel2.AddHandler(Button.ClickEvent, new RoutedEventHandler(GetHandledToo), true);
}
Private Sub PrimeHandledToo(ByVal sender As Object, ByVal e As EventArgs)
    dpanel2.AddHandler(Button.ClickEvent, New RoutedEventHandler(AddressOf GetHandledToo), True)
End Sub

注釈

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

特定のイベントコントロールの組み合わせのクラス処理動作を回避するためのもう 1 つの手法は、そのイベントのプレビューの代替手段を使用することです。 たとえば、 がクラス処理によって処理済みとしてマークされている場合 MouseLeftButtonDown は、 のハンドラーを PreviewMouseLeftButtonDown 代わりに追加できます。

例外を発生させずに、同じイベントに対して同じハンドラーを複数回追加できます。 ただし、イベントが処理されると、ハンドラーは実際に複数回呼び出されます。 したがって、ハンドラーの実装でこの動作に考慮すべき副作用がある可能性がある方法を検討してください。

通常、このメソッドを使用して、カスタム ルーティング イベントの Microsoft .NET イベント アクセス パターンの "add" アクセサーの実装を提供します。

適用対象