gpt4 book ai didi

silverlight - 如何删除 Silverlight RichTextBox 中的超链接?

转载 作者:行者123 更新时间:2023-12-04 06:07:05 26 4
gpt4 key购买 nike

我有一个 RichTextBox用户可以编辑以创建超链接(在我的例子中是指向另一个包含文档的页面而不是外部 URL)。成功创建链接后,我现在需要能够删除它。

我有代码标识我在当前选择中有一个超链接:

TextSelection linkText = richTextBox.Selection;

if (linkText != null && !string.IsNullOrWhiteSpace(linkText.Text))
{
XElement root = XElement.Parse(linkText.Xaml);
XNamespace ns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation";
XElement linkElement = root.Element(ns + "Paragraph").Element(ns + "Hyperlink");
if (linkElement != null)
{
// Get here if have a Hyperlink. How do I remove or update?
}
}

然而,我现在被困在 if 里面的那一点上。测试。如何找到超链接以便完全删除它?

我设置超链接的代码是:
TextSelection linkText = richTextBox.Selection;
var hyperlink = new Hyperlink();

hyperlink.Inlines.Add(linkText.Text);
if (!String.IsNullOrEmpty(selectedTopic)) // A string holding the link target
{
// Setup hyperlink here
}

linkText.Insert(hyperlink);

我已经设法弄清楚如何更新超链接:
foreach (var block in richTextBox.Blocks)
{
Paragraph p = block as Paragraph;

foreach (var inline in p.Inlines)
{
var hyperlink = inline as Hyperlink;
if (hyperlink != null && hyperlink.NavigateUri.AbsoluteUri.Contains(currentLink))
{
hyperlink.NavigateUri = new Uri(newLink);
}
}
}

我可以使用相同的方法删除超链接,但如何转换 Hyperlink到正常 Inline ?

最佳答案

看起来你越来越接近你只需要持有对链接的引用然后使用 Remove .类似于以下内容(我喜欢使用 Linq 使事情更简洁):-

foreach (var p in richTextBox.Blocks.OfType<Paragraph>()) 
{
var hyperlink = p.Inlines.OfType<HyperLink>()
.FirstOrDefault(hl => hl.NavigateUri.AbsoluteUri.Contains(currentLink));

if (hyperlink != null)
{
p.Inlines.Remove(hyperlink);
break;
}
}

编辑 : 想保留超链接的内容? (即,只需删除包装超链接),
foreach (var p in richTextBox.Blocks.OfType<Paragraph>()) 
{
var hyperlink = p.Inlines.OfType<HyperLink>()
.FirstOrDefault(hl => hl.NavigateUri.AbsoluteUri.Contains(currentLink));

if (hyperlink != null)
{
int index = p.Inlines.IndexOf(hyperlink);
Span span = new Span();

foreach (var inline in hyperlink.Inlines.ToArray())
{
hyperlink.Inlines.Remove(inline);
span.Inlines.Add(inline);
}

// You may need code here to preserve the Font properties etc from hyperlink to span.

p.Inlines[index] = span;
break;
}
}

关于silverlight - 如何删除 Silverlight RichTextBox 中的超链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8230276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com