2015-03-31 109 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