我想在RichEditBox中使用PointerReleased事件,但是它不起作用。
Xaml:
<RichEditBox x:Name="RebText" PointerReleased="RebText_PointerReleased"/>
Xaml.cs:
private void RebText_PointerReleased(object sender, PointerRoutedEventArgs e)
{
throw new NotImplementedException();
}
谢谢!
答案 0 :(得分:0)
无法正常工作:
PointerRoutedEventArgs
具有Handled
bool
属性。如果有任何PointerEventHandler
将此Handled
标记为true,则事件处理程序链不再继续。
现在,RichEditBox
控件的设计者由于某些明显的原因不得不钩住PointerReleased
事件,并且在处理程序中,他必须将Handled
标记为true。结果,您添加到事件的处理程序将不会被调用。
这在其他控件中也会发生。一个示例是:您不能仅通过向其添加PointerWheelChanged
来钩住ScrollViewer
的{{1}}事件,例如:
EventHandler
将添加处理程序,但出于相同原因将不会调用该处理程序。
解决方案:
所有myScrollViewer.PointerWheelChanged += Some_Handler;
都具有AddHandler方法。就像UIElement
运算符一样,此方法也将EventHandler
添加到事件中,但是好处是,您可以:
即使事件被处理,提供的处理程序也会被调用 其他地方
因此,您应该做的是类似
+=
然后定义RebText.AddHandler(RichEditBox.PointerReleasedEvent, new PointerEventHandler(RebText_PointerReleased), true);
:
RebText_PointerReleased
第三个参数是您指定要调用此处理程序的位置,即使该事件被标记为已处理。
注意:,处理已处理的事件不是一个好习惯,因为,正如文档所说:
请勿常规地请求重新处理路由事件,因为它会干扰 Windows Runtime事件系统的预期设计 控制合成。