Поделиться через


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. Как правило, это следует делать только в том случае, если есть известная проблема обработки, с помощью которых вы пытаетесь обойтись, например, система ввода обрабатывает события мыши или клавиатуры.

Применяется к