UIElement.AddHandler 方法

定义

为指定的路由事件添加路由事件处理程序,并将该处理程序添加到当前元素的处理程序集合中。

重载

AddHandler(RoutedEvent, Delegate)

为指定的路由事件添加路由事件处理程序,并将该处理程序添加到当前元素的处理程序集合中。

AddHandler(RoutedEvent, Delegate, Boolean)

为指定的路由事件添加路由事件处理程序,并将该处理程序添加到当前元素的处理程序集合中。 将 handledEventsToo 指定为 true,可为已标记为由事件路由中的其他元素处理的路由事件调用所提供的处理程序。

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)

为指定的路由事件添加路由事件处理程序,并将该处理程序添加到当前元素的处理程序集合中。 将 handledEventsToo 指定为 true,可为已标记为由事件路由中的其他元素处理的路由事件调用所提供的处理程序。

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

请勿定期请求重新处理路由事件。

示例

以下示例实现对 Initialized 页面上的事件调用的处理程序,该处理程序使用 handledEventsTootrue将定义的处理程序附加到页面上的命名元素之一。 即使路由中的另一个元素在到达路由中的处理元素之前将共享事件数据标记为已处理,也会调用此处理程序。

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

注解

以实际方式处理低级别输入事件是一项复杂的任务。 许多控件实现的行为,其中某个事件被标记为已处理,并替换为另一个更直观的事件。 通常,如果存在一些设计意图,控件只会将平台输入事件标记为已处理。 在某些情况下,这些设计意图可能不是你对输入事件的特定处理所需的。 正是针对这些方案,根据需要向 handledEventsTootrue 注册处理程序。 但不应例行公事地执行此操作。 调用处理程序以响应所有事件,即使处理,也会使你自己的应用程序事件处理逻辑复杂化。 如果处理程序逻辑很大,则性能可能会下降。 对于已在开发过程中发现某些控件正在处理仍希望使用应用程序逻辑处理的事件的情况,应保留对已处理事件的附加处理程序的使用。

避免某些事件控件组合的类处理行为的另一种方法是使用该事件的预览替代项。 例如,如果 MouseLeftButtonDown 被标记为由类处理处理,则可以改为添加 处理程序 PreviewMouseLeftButtonDown

可以多次为同一事件添加相同的处理程序,而不会引发异常。 但是,在处理事件时,处理程序实际上会多次调用。 因此,请考虑此行为在处理程序实现中应考虑到的副作用。

通常使用此方法为自定义路由事件的 Microsoft .NET 事件访问模式提供“add”访问器的实现。

适用于