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