在WPF流程文档中的指定位置插入超链接

在WPF流程文档中的指定位置插入超链接,wpf,insert,richtextbox,hyperlink,flowdocument,Wpf,Insert,Richtextbox,Hyperlink,Flowdocument,我想以编程方式将WPF超链接元素插入到FlowDocument中 目标是创建一个工具栏按钮,该按钮将在RichTextBox中运行一段文本,并将其替换为超链接。这与您在web上看到的在Wiki或博客(或StackOverflow)上创建超链接的界面相同 我可以找到所选文本的文本范围,如下所示: TextRange tr = new TextRange( MyRichTextBox.Selection.Start, MyRichTextBox.Selection.End);

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

目标是创建一个工具栏按钮,该按钮将在RichTextBox中运行一段文本,并将其替换为超链接。这与您在web上看到的在Wiki或博客(或StackOverflow)上创建超链接的界面相同

我可以找到所选文本的文本范围,如下所示:

    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);
        } 
    }
string rawXaml=“谷歌主页”;
使用(MemoryStream stream=new MemoryStream())
{
StreamWriter writer=新StreamWriter(流);
writer.Write(rawXaml);
writer.Flush();
流位置=0;
if(tr.CanLoad(DataFormats.Xaml))
{
tr.Load(流,DataFormats.Xaml);
} 
}
但我似乎仍然将纯文本粘贴到RichTextBox中


我做错了什么?有没有更好的方法来完成我想做的事情?

使用包含文本指针的超链接构造函数:

tr.Text = "";
Run run = new Run("Google Home Page");
Hyperlink hlink = new Hyperlink(run, tr.Start);
hlink.NavigateUri = new Uri("http://www.google.com/");
或者,先更改文本,然后使用包含两个文本指针的文本:

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

编辑:如果要使用TextRange.Load,请尝试将超链接包装在跨距中:

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

我不知道为什么普通超链接不起作用,但它更接近TextRange.Save返回的内容

谢谢!超链接构造函数的语法比字符串解析好得多。谢谢你的超链接构造函数