次の方法で共有


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 イベント アクセス パターンの "追加" アクセサーの実装を提供します。

適用対象

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

注釈

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

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

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

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

適用対象