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

Suj*_*jiz 6 windows-phone-7 windows-phone-7.1

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

Cla*_*sen 12

使用HyperLink.

<TextBlock>
    <Run>Pure Text</Run>
    <Hyperlink Command="{Binding HyperLinkTapped}">http://google.com</Hyperlink>
    <Run>Pure Text Again</Run>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

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();
}
Run Code Online (Sandbox Code Playgroud)

  • 我使用7.1,这个xaml甚至不为我编译. (6认同)