gpt4 book ai didi

wpf - 在 WPF FlowDocument 的指定位置插入超链接

转载 作者:行者123 更新时间:2023-12-04 15:25:27 25 4
gpt4 key购买 nike

我想以编程方式将 WPF 超链接元素插入到 FlowDocument 中。

目标是创建一个工具栏按钮,该按钮将采用 RichTextBox 中的一系列文本并将其替换为超链接。它与您在网络上看到的用于在维基或博客(或 StackOverflow)上创建超链接的界面类型相同。

我可以像这样找到所选文本的 TextRange:

    TextRange tr = new TextRange(
MyRichTextBox.Selection.Start,
MyRichTextBox.Selection.End);

我正在尝试将超链接 Xaml 填充到 TextRange 中,如下所示:

    string rawXaml = "<Hyperlink xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" NavigateUri=\"http://www.google.com/\">Google Home Page</Hyperlink>";

using(MemoryStream stream = new MemoryStream())
{
StreamWriter writer = new StreamWriter(stream);
writer.Write(rawXaml);
writer.Flush();
stream.Position = 0;

if (tr.CanLoad(DataFormats.Xaml))
{
tr.Load(stream, DataFormats.Xaml);
}
}

但我似乎仍然将纯文本粘贴到 RichTextBox 中。

我在这里做错了什么?是否有更好的方法来完成我想做的事情?

最佳答案

使用接受 TextPointer 的超链接的构造函数:

tr.Text = "";
Run run = new Run("Google Home Page");
Hyperlink hlink = new Hyperlink(run, tr.Start);
hlink.NavigateUri = new Uri("http://www.google.com/");

或者,先更改文本,然后使用带有两个 TextPointer 的文本:

tr.Text = "Google Home Page";
Hyperlink hlink = new Hyperlink(tr.Start, tr.End);
hlink.NavigateUri = new Uri("http://www.google.com/");

编辑:如果您想使用 TextRange.Load,请尝试将超链接包装在 Span 中:

string rawXaml = "<Span xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><Hyperlink NavigateUri=\"http://www.google.com/\">Google Home Page</Hyperlink></Span>";

我不确定为什么当普通超链接不起作用时这会起作用,但它更接近于 TextRange.Save 返回的内容。

关于wpf - 在 WPF FlowDocument 的指定位置插入超链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3485937/

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