UIElement.RemoveHandler(RoutedEvent, Delegate) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
从此元素中删除指定的路由事件处理程序。
public:
virtual void RemoveHandler(System::Windows::RoutedEvent ^ routedEvent, Delegate ^ handler);
public void RemoveHandler (System.Windows.RoutedEvent routedEvent, Delegate handler);
abstract member RemoveHandler : System.Windows.RoutedEvent * Delegate -> unit
override this.RemoveHandler : System.Windows.RoutedEvent * Delegate -> unit
Public Sub RemoveHandler (routedEvent As RoutedEvent, handler As Delegate)
参数
- routedEvent
- RoutedEvent
附加了处理程序的路由事件的标识符。
- handler
- Delegate
要从此元素的事件处理程序集合中删除的特定处理程序实现。
实现
示例
以下示例用作 RemoveHandler 事件包装定义的一部分。
public static readonly RoutedEvent TapEvent = EventManager.RegisterRoutedEvent(
"Tap", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyButtonSimple));
// Provide CLR accessors for the event
public event RoutedEventHandler Tap
{
add { AddHandler(TapEvent, value); }
remove { RemoveHandler(TapEvent, value); }
}
Public Shared ReadOnly TapEvent As RoutedEvent = EventManager.RegisterRoutedEvent("Tap", RoutingStrategy.Bubble, GetType(RoutedEventHandler), GetType(MyButtonSimple))
' Provide CLR accessors for the event
Public Custom Event Tap As RoutedEventHandler
AddHandler(ByVal value As RoutedEventHandler)
Me.AddHandler(TapEvent, value)
End AddHandler
RemoveHandler(ByVal value As RoutedEventHandler)
Me.RemoveHandler(TapEvent, value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As RoutedEventArgs)
Me.RaiseEvent(e)
End RaiseEvent
End Event
注解
使用此 API 的最常见方案是在实现与自定义路由事件关联的公共语言运行时 (CLR) 与自定义路由事件关联的“包装器”事件时,特别是当你在 CLR 级别实现处理程序的“remove”逻辑时。 本备注部分后面的示例说明了此方案。
如果没有使用与方法调用的输入参数匹配的条件注册的处理程序,则调用此方法不起作用。
如果附加了多个与条件匹配的处理程序,则只会删除事件处理程序存储中的第一个处理程序。 此行为与运算符的 -=
CLR 行为一致。
两者routedEvent``handler
都不可能null
。 尝试提供任一值 null
会引发异常。
此方法将忽略 handledEventsToo
参数信息,如果处理程序是首次使用 AddHandler(RoutedEvent, Delegate, Boolean) 启用处理已处理事件的签名添加的,则会提供该信息。 删除任一类型的处理程序。