2015-03-31 108 views
0

我将超链接添加到RichTextEditor(link)。但是现在我想在用户选择超链接时返回超链接。在这里,我的意思是我想要超链接元素不仅仅是文本。WPF RichTextBox获取选定元素

我想要做的是创建一个弹出式超链接谷歌文档。我可以添加超链接就好了。但现在我需要修改现有的链接。获取显示文本很容易,但要获得链接的地址是棘手的。我不想整个段落,然后寻找链接,因为在一个段落中可能有多个链接。我试过richtextbox.Selection.Start.GetAdjacentElement(Forward/Backward)但它并不总是返回超链接。有没有什么办法只得到选定的元素/超链接?

回答

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

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

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

+0

看到之前并没有帮助我从选定的链接中获取NavigateUri – SZT 2015-03-31 19:35:44