EventManager.RegisterClassHandler 方法

定义

为特定路由事件注册类处理程序。

重载

RegisterClassHandler(Type, RoutedEvent, Delegate)

为特定路由事件注册类处理程序。

RegisterClassHandler(Type, RoutedEvent, Delegate, Boolean)

使用处理事件数据已标记为已处理的事件的选项,为特定路由事件注册类处理程序。

RegisterClassHandler(Type, RoutedEvent, Delegate)

为特定路由事件注册类处理程序。

public:
 static void RegisterClassHandler(Type ^ classType, System::Windows::RoutedEvent ^ routedEvent, Delegate ^ handler);
public static void RegisterClassHandler (Type classType, System.Windows.RoutedEvent routedEvent, Delegate handler);
static member RegisterClassHandler : Type * System.Windows.RoutedEvent * Delegate -> unit
Public Shared Sub RegisterClassHandler (classType As Type, routedEvent As RoutedEvent, handler As Delegate)

参数

classType
Type

声明类处理的类的类型。

routedEvent
RoutedEvent

要处理的事件的路由事件标识符。

handler
Delegate

对类处理程序实现的引用。

示例

下面的示例为 PreviewMouseRightButtonDownEvent添加了一个处理程序,调用 RegisterClassHandler

static MyEditContainer()
{
  EventManager.RegisterClassHandler(typeof(MyEditContainer), PreviewMouseRightButtonDownEvent, new RoutedEventHandler(LocalOnMouseRightButtonDown));
}
internal static void LocalOnMouseRightButtonDown(object sender, RoutedEventArgs e)
{
  MessageBox.Show("this is invoked before the On* class handler on UIElement");
  //e.Handled = true; //uncommenting this would cause ONLY the subclass' class handler to respond
}
Shared Sub New()
  EventManager.RegisterClassHandler(GetType(MyEditContainer), PreviewMouseRightButtonDownEvent, New RoutedEventHandler(AddressOf LocalOnMouseRightButtonDown))
End Sub
Friend Shared Sub LocalOnMouseRightButtonDown(ByVal sender As Object, ByVal e As RoutedEventArgs)
  MessageBox.Show("this is invoked before the On* class handler on UIElement")
  'e.Handled = True //uncommenting this would cause ONLY the subclass' class handler to respond
End Sub

注解

类处理是可用于路由事件的功能,包括通过路由事件支持实现的附加事件。 类处理程序类似于类的所有实例存在的静态处理程序。 由于处理程序是静态的,因此不能直接使用类处理程序更改实例属性,但可以通过 参数和/或事件数据访问实例 sender

类处理程序在实例处理程序之前调用。 可以实现一个类处理程序,该处理程序具有将事件标记为已处理的行为。 因此,除非实例处理程序专门为已处理的事件注册,否则不会调用类处理事件的实例处理程序。

许多 WPF 基元素事件提供类处理虚拟方法。 通过在继承基类的类中重写这些方法,可以实现类处理,而无需在静态构造函数中调用 RegisterClassHandler 。 这些类处理方法通常适用于输入事件,其名称以“On”开头,以正在类处理的事件的名称结尾。

有关类处理的详细信息,请参阅 将路由事件标记为已处理和类处理

使用此签名时,类处理程序将注册为仅调用以响应未经处理的事件。 还可以注册类处理程序以调用,即使事件参数被标记为已处理,使用 RegisterClassHandler(Type, RoutedEvent, Delegate, Boolean) 签名将 handledEventsToo 设置为 true

适用于

RegisterClassHandler(Type, RoutedEvent, Delegate, Boolean)

使用处理事件数据已标记为已处理的事件的选项,为特定路由事件注册类处理程序。

public:
 static void RegisterClassHandler(Type ^ classType, System::Windows::RoutedEvent ^ routedEvent, Delegate ^ handler, bool handledEventsToo);
public static void RegisterClassHandler (Type classType, System.Windows.RoutedEvent routedEvent, Delegate handler, bool handledEventsToo);
static member RegisterClassHandler : Type * System.Windows.RoutedEvent * Delegate * bool -> unit
Public Shared Sub RegisterClassHandler (classType As Type, routedEvent As RoutedEvent, handler As Delegate, handledEventsToo As Boolean)

参数

classType
Type

声明类处理的类的类型。

routedEvent
RoutedEvent

要处理的事件的路由事件标识符。

handler
Delegate

对类处理程序实现的引用。

handledEventsToo
Boolean

如果即使已将路由事件的参数标记为已处理时也调用此类处理程序,则为 true;如果保留不对任何标记为已处理的事件调用处理程序的默认行为,则为 false

注解

类处理是可用于路由事件的功能,包括通过路由事件支持实现的附加事件。 类处理程序类似于类的所有实例存在的静态处理程序。 由于处理程序是静态的,因此不能直接使用类处理程序更改实例属性,但可以通过 参数和/或事件数据访问实例 sender

类处理程序在实例处理程序之前调用。 可以实现一个类处理程序,该处理程序具有将事件标记为已处理的行为。 因此,除非实例处理程序专门为已处理的事件注册,否则不会调用类处理事件的实例处理程序。

许多 WPF 基元素事件提供类处理虚拟方法。 通过在继承基类的类中重写这些方法,可以实现类处理,而无需在静态构造函数中调用 RegisterClassHandler 。 这些类处理方法通常适用于输入事件,其名称以“On”开头,以正在类处理的事件的名称结尾。

有关类处理的详细信息,请参阅 将路由事件标记为已处理和类处理

使用此签名,可以通过将 handledEventsToo 设置为 true来注册类处理程序,以在处理的事件时调用 。 通常,仅当尝试解决的已知处理问题(例如鼠标或键盘事件的输入系统处理)时,才应执行此操作。

适用于