如何将所选文本转换为RichEditBox中的超链接

时间:2017-01-18 10:50:46

标签: c# .net uwp

我尝试了下面的代码,但它抛出异常System.ArgumentException, 异常消息是:

  

价值不在预期范围内。

public void InsertLink(RichEditBox control) 
{  
    control.Document.Selection.Link ="http://www.bing.com";
}

2 个答案:

答案 0 :(得分:3)

  

它包含的文本必须用引号括起来,可选地在前缀字符0xFDDF之后。例如:“http://www.msn.com”或0xFDDF“http://www.msn.com”。

您可以从MSDN source获取更多详细信息。

因此您需要更改以下代码:

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <RichEditBox x:Name="richeditbox" Height="200">
    </RichEditBox>
    <Button Content="Convert to hypelink" Click="Button_Click"></Button>
</StackPanel>
private void Button_Click(object sender, RoutedEventArgs e)
{
    richeditbox.Document.Selection.Link = "\"http://www.bing.com\"";  
}

答案 1 :(得分:1)

泽维尔的回答是正确的;根据{{​​3}},您需要将URL括在引号中。这只会将选择作为准系统链接注册而没有任何特殊的计算样式(即您的链接看起来与纯文本不同,但它确实是一个链接)。通常,链接使用下划线进行样式设置,为此您可以将其标记为RTF documentation,如下所示:

var sel = control.Document.Selection;
var rtf = @"{\rtf1{\field{\*\fldinst HYPERLINK ""http://www.bing.com""}{\fldrslt{\ul " + sel.Text + "}}}}";
sel.SetText(TextSetOptions.FormatRtf, rtf);

我对RTF不太熟悉,所以我不知道上面的代码是否是最正确的方法,但是它有效。似乎富文本API并没有真正有一种很好的操作字段的方式,所以我不得不求助于原始的RTF标记。