UIElement.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 です。

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

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

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" アクセサーの実装を提供します。

適用対象