Практическое руководство. Добавление обработки классов для перенаправленных событий
Перенаправленные события могут быть обработаны с помощью обработчики классов или экземпляров на заданного узла в маршруте. Обработчики классов вызываются первыми, а также может использоваться реализациями класса для подавления событий обработчиков экземпляров или введения вариантов поведения других событий для события, которые принадлежат базовых классов. В этом примере показаны два тесно связанные методы для реализации обработчиков класса.
Пример
В этом примере пользовательский класс, основанный на Canvas панели. Основной замысел приложения является то, что пользовательский класс представляет поведение его дочерних элементов, включая перехват, нажатии любой кнопки мыши и маркировки, их обработки, прежде чем будет вызван дочернего элемента класса или любого обработчика экземпляров на нем.
UIElement Класс предоставляет виртуальный метод, позволяющий обработки класса в Preview
protected override void OnPreviewMouseRightButtonDown(System.Windows.Input.MouseButtonEventArgs e)
{
e.Handled = true; //suppress the click event and other leftmousebuttondown responders
MyEditContainer ec = (MyEditContainer)e.Source;
if (ec.EditState)
{ ec.EditState = false; }
else
{ ec.EditState = true; }
base.OnPreviewMouseRightButtonDown(e);
}
Если нет виртуальных базовых классов или для этого конкретного метода, обработка класса можно добавить непосредственно с помощью служебной программы метод Event
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
}