我尝试了下面的代码,但它抛出异常System.ArgumentException
,
异常消息是:
价值不在预期范围内。
public void InsertLink(RichEditBox control)
{
control.Document.Selection.Link ="http://www.bing.com";
}
答案 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标记。