Windows phone 7 如何设置wp7中可单击的文本块中的链接

Windows phone 7 如何设置wp7中可单击的文本块中的链接,windows-phone-7,windows-phone-7.1,Windows Phone 7,Windows Phone 7.1,我有一个包含链接的文本框。文本中的内容是在运行时生成的。我的问题是文本中的链接不可单击,如何使文本块内的所有链接都可单击,以便在我点击链接时打开web浏览器。在android中,我们可以使用自动链接进行设置。wp7或wp7.1 mango中是否提供此选项?没有内置的功能来完成此操作 如果文本(包括链接)是HTML,则可以在WebBrowser控件中显示它。 如果没有,您需要自己解析文本并构建链接。(包装内的文本块和超链接按钮的组合可能是实现这一点的方法。)使用 纯文本 http://googl

我有一个包含链接的文本框。文本中的内容是在运行时生成的。我的问题是文本中的链接不可单击,如何使文本块内的所有链接都可单击,以便在我点击链接时打开web浏览器。在android中,我们可以使用自动链接进行设置。wp7或wp7.1 mango中是否提供此选项?

没有内置的功能来完成此操作

如果文本(包括链接)是HTML,则可以在WebBrowser控件中显示它。
如果没有,您需要自己解析文本并构建链接。(包装内的文本块和超链接按钮的组合可能是实现这一点的方法。)

使用


纯文本
http://google.com
还是纯文本
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();
}
private void OnMessageReceived(字符串消息)
{
var textBlock=new RichTextBox()
{
TextWrapping=TextWrapping.Wrap,
IsReadOnly=true,
};
var段落=新段落();
var runs=newlist();
foreach(message.Split(“”)中的变量字)
{
Uri;
if(Uri.TryCreate(word、UriKind.Absolute、out-Uri)||
(word.StartsWith(“www.”&&Uri.TryCreate(“http://“+word,UriKind.Absolute,out-Uri)))
{
var link=新的超链接();
link.Inlines.Add(newrun(){Text=word});
链接。单击+=(发件人,e)=>
{
var hyperLink=(发送者作为超链接);
新建WebBrowserTask(){Uri=Uri}.Show();
};
运行。添加(链接);
}
其他的
{
添加(new Run(){Text=word});
}
添加(新运行(){Text=”“});
}
foreach(var磨合运行)
段落.内联线.添加(运行);
textBlock.Blocks.Add(段落);
MessagesListBox.Children.Add(textBlock);
MessagesListBox.UpdateLayout();
}

在silverlight RichTextBox控件中,控件可以帮助您


谷歌网站

没有理由再使用HyperlinkButton;-)我使用的是7.1,这个xaml甚至没有为我编译。首先,它应该是
Hyperlink
l
是小写。其次,我无法在7.1项目中编译xaml代码……更新:相同的代码在WPF中可以正常工作,但在Silverlight 5和WP7.1中都不正确。Hyperlink只能在WP7中的RichTextBox中使用。您引用的文档说明:“您可以使用Hyperlink元素在RichTextBox中显示超链接。”您能否解释一下如何编译此代码?在7.1项目中,它不会为我构建。
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();
}