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
来挂钩 ScrollViewer
的 PointerWheelChanged
事件,比如:
myScrollViewer.PointerWheelChanged += Some_Handler;
将添加处理程序,但出于同样的原因不会调用它。
解法:
所有 UIElement
都有一个 AddHandler 方法。此方法还向事件添加 EventHandler
s,就像 +=
运算符一样,但好处是,您可以:
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.
我想在 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
来挂钩 ScrollViewer
的 PointerWheelChanged
事件,比如:
myScrollViewer.PointerWheelChanged += Some_Handler;
将添加处理程序,但出于同样的原因不会调用它。
解法:
所有 UIElement
都有一个 AddHandler 方法。此方法还向事件添加 EventHandler
s,就像 +=
运算符一样,但好处是,您可以:
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.