我有一个包含链接的文本框。文本中的内容是在运行时生成的。我的问题是文本中的链接是不可点击的,如何使文本块内的所有链接都可以点击,这样当我点击时它应该打开web浏览器的链接。在android中我们可以使用autolink设置它。这样的选项在wp7或wp7.1芒果中可用吗?
答案 0 :(得分:12)
使用HyperLink。
<TextBlock>
<Run>Pure Text</Run>
<Hyperlink Command="{Binding HyperLinkTapped}">http://google.com</Hyperlink>
<Run>Pure Text Again</Run>
</TextBlock>
Windows Phone 7.1(Mango)支持此功能。
如有必要,您可以在运行时根据数据创建自己的FlowDocument。
如何从字符串生成FlowDocument的示例:
private void OnMessageReceived(string message)
{
var textBlock = new RichTextBox()
{
TextWrapping = TextWrapping.Wrap,
IsReadOnly = true,
};
var paragraph = new Paragraph();
var runs = new List<Inline>();
foreach (var word in message.Split(' '))
{
Uri uri;
if (Uri.TryCreate(word, UriKind.Absolute, out uri) ||
(word.StartsWith("www.") && Uri.TryCreate("http://" + word, UriKind.Absolute, out uri)))
{
var link = new Hyperlink();
link.Inlines.Add(new Run() { Text = word });
link.Click += (sender, e) =>
{
var hyperLink = (sender as Hyperlink);
new WebBrowserTask() { Uri = uri }.Show();
};
runs.Add(link);
}
else
{
runs.Add(new Run() { Text = word });
}
runs.Add(new Run() { Text = " "});
}
foreach (var run in runs)
paragraph.Inlines.Add(run);
textBlock.Blocks.Add(paragraph);
MessagesListBox.Children.Add(textBlock);
MessagesListBox.UpdateLayout();
}
答案 1 :(得分:2)
没有内置功能来执行此操作。
如果您的文本(包括链接)是HTML,您可以在WebBrowser控件中显示它 如果不是,您将需要解析文本并自己构建链接。 (WrapPanel内部的TextBlocks和HyperlinkButtons的组合可能就是这样做的。)
答案 2 :(得分:2)
在silverlight中,RichTextBox控制可以帮助你。
<RichTextBox>
<Paragraph>
<Run Text="This have to navigate me to Google: "/>
<Hyperlink NavigateUri="http://google.com" TargetName="_blank">google.com</Hyperlink>
</Paragraph>
</RichTextBox>