我正在向RichTextEditor(link)添加超链接。但现在我想在用户选择超链接时返回超链接。在这里,我的意思是我希望Hyperlink元素不仅仅是文本。
我要做的是为超链接创建一个类似谷歌文档的弹出式窗口。我可以添加超链接就好了。但现在我需要修改现有的链接。获取显示文本很容易,但获取链接的地址是棘手的。我不想要整个段落,然后查找链接,因为一个段落中可以有多个链接。
我尝试了richtextbox.Selection.Start.GetAdjacentElement(Forward/Backward)
,但并不总是返回超链接。有没有办法获得所选的元素/超链接?
答案 0 :(得分:0)
也许,有些帮助在这里^^
根据参考,我尝试找到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;
}
在插入位置获取超链接只需更改方法的第一行。