如何在wp7中单击可单击的文本块中设置链接

时间:2011-09-27 10:23:21

标签: windows-phone-7 windows-phone-7.1

我有一个包含链接的文本框。文本中的内容是在运行时生成的。我的问题是文本中的链接是不可点击的,如何使文本块内的所有链接都可以点击,这样当我点击时它应该打开web浏览器的链接。在android中我们可以使用autolink设置它。这样的选项在wp7或wp7.1芒果中可用吗?

3 个答案:

答案 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和HyperlinkBut​​tons的组合可能就是这样做的。)

答案 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>