RichEditBox UWP 上发布的指针

Pointer Released On RichEditBox UWP

我想在 RichEditBox 中使用 PointerReleased 事件,但它不起作用。

Xaml:

<RichEditBox x:Name="RebText" PointerReleased="RebText_PointerReleased"/>

Xaml.cs:

private void RebText_PointerReleased(object sender, PointerRoutedEventArgs e)
{
    throw new NotImplementedException();
}

提前致谢!

回复无效:

PointerRoutedEventArgs 有一个 Handled bool 属性。如果任何 PointerEventHandler 将此 Handled 标记为真,则事件处理程序链不再继续。

现在,RichEditBox 控件的设计者出于某些显而易见的原因不得不挂钩 PointerReleased 事件,并且在处理程序中,他必须将 Handled 标记为 true。因此,您添加到事件的处理程序将不会被调用。

这也发生在其他控件中。一个例子是:你不能通过简单地向它添加一个 EventHandler 来挂钩 ScrollViewerPointerWheelChanged 事件,比如:

myScrollViewer.PointerWheelChanged += Some_Handler;

将添加处理程序,但出于同样的原因不会调用它。

解法:

所有 UIElement 都有一个 AddHandler 方法。此方法还向事件添加 EventHandlers,就像 += 运算符一样,但好处是,您可以:

have the provided handler be invoked even if the event is handled elsewhere

所以,你应该做的是:

RebText.AddHandler(RichEditBox.PointerReleasedEvent, new PointerEventHandler(RebText_PointerReleased), true);

然后定义RebText_PointerReleased:

private void RebText_PointerReleased(object sender, PointerRoutedEventArgs e)
{
    // your event handling code here
}

第三个参数是您指定要调用此处理程序的地方,即使事件被标记为已处理。

注意:,处理已经处理的事件不是一个好的做法,因为,正如文档所说:

Do not routinely ask to rehandle a routed event, because it interferes with the intended design of the Windows Runtime event system for control compositing.