【问题标题】:Pointer Released On RichEditBox UWPRichEditBox UWP 上发布的指针
【发布时间】:2019-03-03 14:04:36
【问题描述】:

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

Xaml:

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

Xaml.cs:

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

提前致谢!

【问题讨论】:

    标签: uwp richeditbox


    【解决方案1】:

    Reson 它不起作用:

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

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

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

    myScrollViewer.PointerWheelChanged += Some_Handler;
    

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

    解决方案:

    所有UIElements 都有一个AddHandler 方法。这个方法也将EventHandlers 添加到事件中,就像+= 操作符一样,但是好处是,你可以:

    即使处理了事件,也调用提供的处理程序 其他地方

    所以,你应该做的是,像:

    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 运行时事件系统的预期设计 控制合成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      相关资源
      最近更新 更多