WPF RichTextBox获取所选元素

时间:2015-03-31 17:55:08

标签: c# wpf hyperlink richtextbox

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

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

我尝试了richtextbox.Selection.Start.GetAdjacentElement(Forward/Backward),但并不总是返回超链接。有没有办法获得所选的元素/超链接?

2 个答案:

答案 0 :(得分:0)

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

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将标记为红色。

答案 1 :(得分:0)

所以这就是我最终要做的超链接。

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;
}

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