我有一个带有超链接的文字。 为了不刺激读者,我想让普通文本和链接在同一行。现在每个Inline元素都会开始一个新行。
显示:
请访问
继续。
我想:
请访问http://google.com继续。
我还注意到,超链接命中区域覆盖了内嵌元素,而不仅仅是文本。
我的问题与此处描述和解决的问题相同: Add clickable hyperlinks to a RichTextBox without new paragraph
问题是,似乎不像wp8的flowdocument这样的东西不存在。 我需要以编程方式创建内联元素。
这里我的代码是如何添加内联元素的:
int index = 0;
rt = new RichTextBox() { };
while (true)
{
Paragraph para = new Paragraph();
if (item.text.Substring(index).IndexOf("<") == 0)
{
//TRUE when link
//I extract the URL and the linktext, and also update the index
Hyperlink hyper = new Hyperlink();
hyper.Click += new RoutedEventHandler((sender,e) => Hyperlink_Click(sender,e,URL));
hyper.Inlines.Add(linktext);
para.Inlines.Add(hyper);
}
else if (item.text.Substring(index).Contains("<"))
{
//TRUE when text, item.text contains a link
// I extract the text and update index
Run run = new Run() { Text = text };
para.Inlines.Add(run);
}
else
{
//TRUE when only text is left
Run run = new Run() { Text = item.text.Substring(index) };
para.Inlines.Add(run);
rt.Blocks.Add(para);
break;
}
// REMOVE: rt.Blocks.Add(para);
}
rt.SetValue(Grid.RowProperty, MainViewer.RowDefinitions.Count - 1);
MainViewer.Children.Add(rt);
我仍然无法解决这个问题,没有人知道解决方案吗?我之前在应用程序中看到了我想要的东西,所以它必须是可能的。
我为每个内联元素创建了一个新段落。我已修复上面的代码,现在正在使用
答案 0 :(得分:0)
Paragraph p = new Paragraph();
p.Inlines.Add("Plase visit ");
var link = new Hyperlink();
link.Inlines.Add("google.com ");
p.Inlines.Add(link);
p.Inlines.Add("to continue");
rtb.Blocks.Add(p);
这对我来说很好。
PS 如果你想在你的app中显示一些html,你可以使用http://msptoolkit.codeplex.com/中的HTMLTextBox或HTMLViewer