WPF RichTextBox 获取选中的元素
WPF RichTextBox get selected element
我正在将 hyperlink 添加到 RichTextEditor (link)。但是现在我想在用户选择 hyperlink 时取回 Hyperlink。在这里我的意思是我想要 Hyperlink 元素而不仅仅是文本。
我想做的是为 hyperlink 创建一个类似于 google 文档的弹出窗口。我可以添加 hyperlink 就好了。但是现在我需要修改现有的link。获取显示文本很容易,但获取 link 的地址却很棘手。而且我不想要整个段落然后寻找 link 因为一个段落中可以有多个 link。
我试过 richtextbox.Selection.Start.GetAdjacentElement(Forward/Backward)
但它并不总是返回 hyperlink。有什么方法可以只得到选中的 element/hyperlink?
也许,这里有一些帮助^^
根据参考,我尝试找到 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;
}
要在插入符位置获取超链接,只需更改方法的第一行。
我正在将 hyperlink 添加到 RichTextEditor (link)。但是现在我想在用户选择 hyperlink 时取回 Hyperlink。在这里我的意思是我想要 Hyperlink 元素而不仅仅是文本。
我想做的是为 hyperlink 创建一个类似于 google 文档的弹出窗口。我可以添加 hyperlink 就好了。但是现在我需要修改现有的link。获取显示文本很容易,但获取 link 的地址却很棘手。而且我不想要整个段落然后寻找 link 因为一个段落中可以有多个 link。
我试过 richtextbox.Selection.Start.GetAdjacentElement(Forward/Backward)
但它并不总是返回 hyperlink。有什么方法可以只得到选中的 element/hyperlink?
也许,这里有一些帮助^^
根据参考,我尝试找到 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;
}
要在插入符位置获取超链接,只需更改方法的第一行。