【问题标题】:Determining the tapped paragraph using the 'DoubleTapped' event on RichTextBlock使用 RichTextBlock 上的“DoubleTapped”事件确定轻敲段落
【发布时间】:2017-11-30 21:51:41
【问题描述】:

我正在尝试按照基于段落的交互来做一些事情,就像许多电子书阅读器所做的那样(它们让您单击一个段落并显示一个带有一些选项的小菜单等)。

我坚持的事情是确定用户点击/点击的段落。这些事件不能直接分配给Block 类型的对象,所以我尝试通过将DoubleTapped 事件处理程序附加到父RichTetBlock 来解决它。我在想有可能以某种方式根据位置确定段落,但我不确定如何在实践中进行。

到目前为止我得到了什么:

this.chapterText.AddHandler(DoubleTappedEvent, new DoubleTappedEventHandler(chapterText_DoubleTapped), true);
...
private void chapterText_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
{
    var rtb = sender as RichTextBlock;
    var y = e.GetPosition(rtb).Y;
    var paragraph = rtb.Blocks.FirstOrDefault(o => y >= o.????) as Paragraph;
}

但这种方法显然行不通。

这里有什么我遗漏的吗?

谢谢!

【问题讨论】:

    标签: c# .net uwp richtextblock


    【解决方案1】:

    到目前为止我已经得到了什么......

    你快到了:

        private void RichTextBlock_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
        {
            RichTextBlock richTextBlock = sender as RichTextBlock;
            TextPointer textPointer = richTextBlock.GetPositionFromPoint(e.GetPosition(richTextBlock));
            Paragraph paragraph = richTextBlock.Blocks.Where(b => b.ContentStart.Offset <= textPointer.Offset && b.ContentEnd.Offset >= textPointer.Offset).FirstOrDefault() as Paragraph;
        }
    

        private void RichTextBlock_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
        {
            RichTextBlock richTextBlock = sender as RichTextBlock;
            TextPointer textPointer = richTextBlock.GetPositionFromPoint(e.GetPosition(richTextBlock));
            Run run = textPointer.Parent as Run;
            Paragraph paragraph = run.ElementStart.Parent as Paragraph;
        }
    

    顺便说一句,如果将RichTextBlockIsTextSelectionEnabled 属性设置为false,则不必从后面的代码中手动注册DoubleTapped 事件处理程序,它只需在XAML 中注册后即可工作:

    <RichTextBlock IsTextSelectionEnabled="False" DoubleTapped="RichTextBlock_DoubleTapped">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多