1

我正在开发一个 Windows 商店应用程序。在我的页面中,我有一个 RichText(而不是 WPF 中的 RichText)。

我想订阅该PointerPressed活动。在我的构造函数中,我有以下内容

   rtb.PointerPressed += RtbOnPointerPressed;
    rtb.PointerReleased += RtbOnPointerReleased;

我的问题是这些事件永远不会被触发。

如果我在我的 RichTextBlock 顶部放置一个网格(我的代码中为TopGrid),我可以捕获 pointerPressed 事件。但是,我不能再在我的 RichTextBlock 中选择文本。

如果我尝试pointerPressed在容器级别捕获事件(下面代码中的Container),如果我按下边距而不是在我选择文本时,它就会起作用。

    <Grid x:Name="Container">//at this level, pointerPressed is raised
           //only when I click outside the richtextblock

       <RichTextBlock x:Name="rtb"></RichTextBlock>//PointerPressed is never fired
       <Grid Background="Transparent" x:Name="TopGrid"></Grid>//If present,
       //the selection does not work on RichTextBlock" 
       //but I can capture the pointerPressed event
    </Grid>

这里有谁知道选择文本时如何知道指针位置?

4

1 回答 1

0

您必须处理 SelectionChanged 事件。Sender 将具有 SelectionStart、SelectionEnd 和 SelectedText 属性。

如果您出于某种原因想要使用 Pressed/Released 事件,请将您的代码替换为:

rtb.AddHandler(PointerPressedEvent, new PointerEventHandler(RtbOnPointerPressed), true);

rtb.AddHandler(PointerReleasedEvent, new PointerEventHandler(RtbOnPointerReleased), true);

最后一个参数handledEventsToo 必须设置为true,以确保即使事件在其他地方处理,也会调用处理程序。

根据https://msdn.microsoft.com/pl-pl/library/windows/apps/xaml/windows.ui.xaml.uielement.pointerpressed你应该知道 PointerPressed 和 PointerReleased 并不总是成对出现.

于 2016-02-29T13:15:13.540 回答