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”访问器的实现。

适用于