UIElement.AddHandler メソッド

定義

指定したルーティング イベントのルーティング イベント ハンドラーを追加します。このハンドラーは、現在の要素のハンドラー コレクションに追加されます。Adds a routed event handler for a specified routed event, adding the handler to the handler collection on the current element.

オーバーロード

AddHandler(RoutedEvent, Delegate)

指定したルーティング イベントのルーティング イベント ハンドラーを追加します。このハンドラーは、現在の要素のハンドラー コレクションに追加されます。Adds a routed event handler for a specified routed event, adding the handler to the handler collection on the current element.

AddHandler(RoutedEvent, Delegate, Boolean)

指定したルーティング イベントのルーティング イベント ハンドラーを追加します。このハンドラーは、現在の要素のハンドラー コレクションに追加されます。Adds a routed event handler for a specified routed event, adding the handler to the handler collection on the current element. イベント ルート上の別の要素により既にハンドル済みとしてマークされているルーティング イベントに対し、指定したハンドラーが呼び出されるようにするには、handledEventsTootrue に指定します。Specify handledEventsToo as true to have the provided handler be invoked for routed event that had already been marked as handled by another element along the event route.

AddHandler(RoutedEvent, Delegate)

指定したルーティング イベントのルーティング イベント ハンドラーを追加します。このハンドラーは、現在の要素のハンドラー コレクションに追加されます。Adds a routed event handler for a specified routed event, adding the handler to the handler collection on the current element.

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

パラメーター

routedEvent
RoutedEvent

ハンドルするルーティング イベントの識別子。An identifier for the routed event to be handled.

handler
Delegate

ハンドラーの実装に対する参照。A reference to the handler implementation.

実装

注釈

同じイベントに対して、例外を発生させることなく同じハンドラーを複数回追加できます。You can add the same handler for the same event multiple times without raising an exception. ただし、ハンドラーは実際にはイベントが処理されるときに複数回呼び出されます。However, the handler is actually invoked multiple times when the event is handled. そのため、この動作がハンドラーの実装で考慮する必要がある副作用について考えてみてください。Therefore, consider how this behavior might have side effects that should be accounted for in your handler implementation.

通常、このメソッドを使用して、カスタムルーティングイベントの Microsoft .NETMicrosoft .NET イベントアクセスパターン用の "add" アクセサーの実装を提供します。You typically use this method to provide the implementation of the "add" accessor for the Microsoft .NETMicrosoft .NET event access pattern of a custom routed event.

AddHandler(RoutedEvent, Delegate, Boolean)

指定したルーティング イベントのルーティング イベント ハンドラーを追加します。このハンドラーは、現在の要素のハンドラー コレクションに追加されます。Adds a routed event handler for a specified routed event, adding the handler to the handler collection on the current element. イベント ルート上の別の要素により既にハンドル済みとしてマークされているルーティング イベントに対し、指定したハンドラーが呼び出されるようにするには、handledEventsTootrue に指定します。Specify handledEventsToo as true to have the provided handler be invoked for routed event that had already been marked as handled by another element along the event route.

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

パラメーター

routedEvent
RoutedEvent

ハンドルするルーティング イベントの識別子。An identifier for the routed event to be handled.

handler
Delegate

ハンドラーの実装に対する参照。A reference to the handler implementation.

handledEventsToo
Boolean

イベント データ内でルーティング イベントが処理済みとしてマークされている場合でも呼び出されるようにハンドラーを登録するには true。ルーティング イベントが既に処理済みとしてマークされている場合はハンドラーを呼び出さないという既定の条件を使用してハンドラーを登録する場合は falsetrue to register the handler such that it is invoked even when the routed event is marked handled in its event data; false to register the handler with the default condition that it will not be invoked if the routed event is already marked handled.

既定値は、false です。The default is false.

ルーティング イベントの再処理を機械的に要求しないでください。Do not routinely ask to rehandle a routed event.

次の例では、handledEventsToo trueを使用して、定義されたハンドラーをページ上のいずれかの名前付き要素にアタッチするページで Initialized イベントに対して呼び出されるハンドラーを実装します。The following example implements a handler invoked on the Initialized event on a page that attaches a defined handler to one of the named elements on the page using handledEventsToo true. このハンドラーは、ルート上の別の要素が、ルートの処理要素に到達する前に、処理された共有イベントデータをマークした場合でも呼び出されます。This handler would be invoked even if another element along the route marked the shared event data as handled before reaching the handling element in the route.

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

注釈

低レベルの入力イベントを実用的な方法で処理することは、複雑なタスクです。Processing low-level input events in a practical way is a complex task. 多くのコントロールは、特定のイベントが処理済みとしてマークされている動作を実装し、別の直感的なイベントに置き換えます。Many controls implement behavior where a certain event is marked as handled, and is replaced by another more intuitive event. 一般に、コントロールは、そのための設計目的がある場合にのみ、プラットフォーム入力イベントを処理済みとしてマークします。Generally, a control will only mark a platform input event as handled if there is some design intention for doing so. 特定のシナリオでは、これらの設計の意図が、入力イベントの特定の処理に必要なものではない可能性があります。In certain scenarios, those design intentions might not be what your particular handling of the input event requires. これらのシナリオでは、true のように handledEventsToo にハンドラーを登録することが適切です。It is for these scenarios that registering handlers with handledEventsToo as true is appropriate. ただし、この作業は定期的に行うべきではありません。But you should not do this routinely. 処理された場合でも、すべてのイベントに応答してハンドラーを呼び出すと、独自のアプリケーションイベント処理ロジックが複雑になります。Invoking handlers in response to all events even if handled will complicate your own application event processing logic. ハンドラーのロジックが大きくなると、パフォーマンスが低下する可能性があります。You may see a decrease in performance if the handler logic is substantial. 開発プロセス中に、アプリケーションロジックで処理するイベントを処理する必要がある場合は、既に処理されているイベントのハンドラーのアタッチを予約する必要があります。You should reserve the use of attaching handlers for already-handled events for situations where you have already discovered during the development process that certain controls are handling events that you still want to handle with application logic.

特定のイベント制御の組み合わせのクラス処理動作を回避するためのもう1つの方法は、そのイベントのプレビューを使用することです。Another technique for avoiding the class handling behavior of certain event-control combinations is to use that event's preview alternative. たとえば、MouseLeftButtonDown がクラス処理によって処理済みとしてマークされている場合は、代わりに PreviewMouseLeftButtonDown のハンドラーを追加できる可能性があります。For example, if MouseLeftButtonDown is marked handled by class handling, you might be able to add handlers for PreviewMouseLeftButtonDown instead.

同じイベントに対して、例外を発生させることなく同じハンドラーを複数回追加できます。You can add the same handler for the same event multiple times without raising an exception. ただし、ハンドラーは実際にはイベントが処理されるときに複数回呼び出されます。However, the handler is actually invoked multiple times when the event is handled. そのため、この動作がハンドラーの実装で考慮する必要がある副作用について考えてみてください。Therefore, consider how this behavior might have side effects that should be accounted for in your handler implementation.

通常、このメソッドを使用して、カスタムルーティングイベントの Microsoft .NETMicrosoft .NET イベントアクセスパターン用の "add" アクセサーの実装を提供します。You typically use this method to provide the implementation of the "add" accessor for the Microsoft .NETMicrosoft .NET event access pattern of a custom routed event.

適用対象