【问题标题】:WPF RichTextBox get selected elementWPF RichTextBox 获取选定的元素
【发布时间】:2015-06-05 04:23:23
【问题描述】:

我正在向 RichTextEditor (link) 添加超链接。但是现在我想在用户选择超链接时取回超链接。在这里我的意思是我想要超链接元素而不仅仅是文本。

我想要做的是创建一个像谷歌文档一样的超链接弹出窗口。我可以添加超链接就好了。但是现在我需要修改现有的链接。获取显示文本很容易,但获取链接地址却很棘手。而且我不想要整个段落然后寻找链接,因为一个段落中可以有多个链接。

我尝试了richtextbox.Selection.Start.GetAdjacentElement(Forward/Backward),但它并不总是返回超链接。有什么方法可以只获取选定的元素/超链接?

【问题讨论】:

    标签: c# wpf hyperlink richtextbox


    【解决方案1】:

    也许,这里有一些帮助^^

    http://blogs.msdn.com/b/prajakta/archive/2006/10/17/autp-detecting-hyperlinks-in-richtextbox-part-i.aspx

    根据参考,我尝试找到 NavigateUri

       public static Hyperlink GetHyberLink(this TextPointer pointer)
         {
             if (pointer == null)
             {
                 return null;
             }     
    
             Inline parent = pointer.Parent as Inline;
             while (parent != null && !(parent is Hyperlink))
             {
                 parent = parent.Parent as Inline;
             }
    
             return parent == null ? null : (Hyperlink)parent;
         }
    

    使用:

    Hyperlink hyperlink = RichTextBox.Selection.Start.GetHyberLink();
    TextRange textRange = new TextRange(hyperlink.ElementStart, hyperlink.ElementEnd);
    textRange.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Red);
    

    结果: NavigateUri 将被标记为红色。

    【讨论】:

    • 看到之前从所选链接获取 NavigateUri 对我没有多大帮助
    【解决方案2】:

    所以这就是我最终获取超链接的方法。

    Hyperlink GetHyperlinkAtSelection()
    {
      var selectedPointer = rtb.Selection.GetNextInsertionPosition(forward)
    
      if(sp == null)
        return;
    
      var para = sp.Paragraph;
    
      var hyperlink = para.Inlines.FirstOrDefault(x => 
        x.ContentStart.CompareTo(sp) == -1 && x.ContentEnd.CompareTo(sp) == 1);
    
      return hyperlink as Hyperlink;
    }
    

    要在插入符号位置获取超链接,只需更改方法的第一行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多