ContentElement.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

要处理的 .routed 事件的标识符。

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

注解

以实际方式处理低级输入事件是一项复杂的任务。 许多控件实现将特定事件标记为已处理的行为,并替换为另一个更直观的事件。 通常,如果存在一些设计意图,控件只会将平台输入事件标记为已处理。 在某些情况下,这些设计意图可能不是你对输入事件的特定处理所需的。 对于这些方案,将处理程序注册到 handledEventsToo,因为 true 是合适的。 但是,你不应该经常这样做。 调用处理程序以响应所有事件,即使处理将使你自己的应用程序事件处理逻辑复杂化。 如果处理程序逻辑很大,可能会降低性能。 对于开发过程中已发现的某些控件正在处理仍要处理的应用程序逻辑的事件,应保留附加处理程序用于已处理的事件。

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

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

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

适用于