我正在尝试开发一个基本的匿名Twitter应用程序我遇到的问题是我希望能够点击内容即。由高音扬声器发布的图像等。如果可能,我还希望能够扩展个人资料图片。
答案 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
这意味着您可以简单地围绕图像对象。
请注意,HyperlinkButton具有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
所以,这是一个更简单的改变。