如何在我的Twitter应用程序中单击文本中的链接?

时间:2012-03-09 01:04:01

标签: windows-phone-7 twitter hyperlink

我正在尝试开发一个基本的匿名Twitter应用程序我遇到的问题是我希望能够点击内容即。由高音扬声器发布的图像等。如果可能,我还希望能够扩展个人资料图片。

1 个答案:

答案 0 :(得分:0)

要在文本中包含链接,您需要在运行时操作接收的数据。这样您就不再使用纯文本填充文本块,而是实际将链接更改为超链接。 This answer详细处理:

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();
}

上述代码的缺点是您丢失了数据绑定。您可以尝试以更改现有文本块而不是添加新文本块的方式更改函数。如果您以后继续在自己的应用程序中使用推文而不是仅仅创建链接,请保留您的数据上下文。

需要习惯于动态操作XAML。

更新:实际上,我发现您可以将支持它的任何元素的Content绑定到UIElement。因此,您可以将TextBox行更改为无用容器<StackPanel Content="{Binding MyRichText}"></StackPanel>,并将上述代码中的textBlock分配给MyRichText的{​​{1}}属性...


要使图像可点击,您需要HyperlinkButton。只需更改模板:

TwitterItem

这意味着您可以简单地围绕图像对象。

请注意,HyperlinkBut​​ton具有NavigateURI属性,因此您只需将其绑定到URL的图像(或作者的配置文件页面,或......)。

<HyperlinkButton>
  singleObject
</HyperlinkButton>

这样的事情。例如,如果您想要一个配置文件URL,则需要将<HyperlinkButton NavigateURI="{Binding ImageSource}"> <Image Source="{Binding ImageSource}" Height="73" Width="73" VerticalAlignment="Top" Margin="0,10,8,0"/> </HyperlinkButton> 更改为NavigateURI="{Binding ImageSource},然后将一个ProfileURL添加到您的TwitterItem并将其设置为您创建新Twitter项目的URL

所以,这是一个更简单的改变。