C# WPF RichTextBox获取选定元素

C# WPF RichTextBox获取选定元素,c#,wpf,hyperlink,richtextbox,C#,Wpf,Hyperlink,Richtextbox,我正在向RichTextEditor()添加超链接。但现在我想在用户选择超链接时恢复超链接。这里我的意思是我想要超链接元素,而不仅仅是文本 我想做的是为超级链接创建一个类似谷歌文档的弹出窗口。我可以添加超链接。但是现在我需要修改现有的链接。获取显示文本很容易,但获取链接地址却很棘手。我不想要整段然后再去寻找链接,因为一段中可能有多个链接 我尝试了richtextbox.Selection.Start.getAdjaceEntelement(向前/向后),但它并不总是返回超链接。有没有办法只获取所

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

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


我尝试了
richtextbox.Selection.Start.getAdjaceEntelement(向前/向后)
,但它并不总是返回超链接。有没有办法只获取所选元素/超链接?

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

基于参考文献,我试图找到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将被标记为红色。

因此,这就是我最终获取超链接的方法

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

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

以前看到过,从所选链接获取NavigateUri没有多大帮助