Reson это не работает:
PointerRoutedEventArgs
имеет Handled
bool
Свойство.Если какой-либо PointerEventHandler
помечает это Handled
как истинное, цепочка обработчика событий больше не продолжается.
Теперь разработчику элемента управления RichEditBox
пришлось перехватить событие PointerReleased
для некоторых очевидныхпричина, и в обработчике он должен был пометить Handled
как истину.В результате обработчик, который вы добавили к событию, не будет вызван.
Это также происходит в других элементах управления.Например: вы не можете перехватить событие PointerWheelChanged
для ScrollViewer
, просто добавив к нему EventHandler
, например:
myScrollViewer.PointerWheelChanged += Some_Handler;
Обработчик будет добавлен, но он выигралне вызываться по той же причине.
Решение:
Все UIElement
имеют метод AddHandler .Этот метод также добавляет EventHandler
s к событиям, как это делает оператор +=
, но преимущество в том, что вы можете:
вызывать предоставленный обработчик, даже если событие обрабатывается в другом месте
Итак, вы должны сделать что-то вроде:
RebText.AddHandler(RichEditBox.PointerReleasedEvent, new PointerEventHandler(RebText_PointerReleased), true);
и затем определить RebText_PointerReleased
:
private void RebText_PointerReleased(object sender, PointerRoutedEventArgs e)
{
// your event handling code here
}
Третий аргумент - это гдевы указали, что хотите, чтобы этот обработчик вызывался, даже если событие помечено как обработанное.
Примечание: не рекомендуется обрабатывать уже обработанное событие, поскольку в качестве документаговорит:
Не просите регулярно обрабатывать перенаправленное событие, потому что это мешает планированию системы событий среды выполнения Windows для компоновки управления.