我正在尝试使文本块中的所有URI链接可点击。这是我采取的方法:
private static void onTextChanged(DependencyObject dependObj, DependencyPropertyChangedEventArgs e)
{
WrapPanel wrapPanel = ((HyperlinkTextBlock)dependObj).LayoutRoot;
wrapPanel.Children.Clear();
// TODO: use a real wordbreaker?
// adding an extra space to the end of the last word. Cry.
IList<string> words = ((string)e.NewValue).Split(' ').Select(word => word + " ").ToList();
foreach (string word in words)
{
Uri uri;
if (Uri.TryCreate(word, UriKind.Absolute, out uri))
{
// TODO the style is off - the text is too big
wrapPanel.Children.Add(new HyperlinkButton()
{
Content = word,
NavigateUri = uri,
TargetName = "_blank",
Margin = new Thickness(0),
Padding = new Thickness(0),
});
}
else
{
wrapPanel.Children.Add(new TextBlock() { Text = word, TextWrapping = TextWrapping.Wrap });
}
}
}
我完全支持使用更加面向XAML/声明式的方式来实现这个,但我不确定如何去做。
这个方法可以正常工作(除了最好能够使用真正的分词器之外),但是
HyperlinkButton
看起来很奇怪。它太大了,文本无法换行。它似乎也有一些偏移,我试图通过将Margin
和Padding
设置为0来修复它,但是没有解决问题。还有其他想法吗?实际上,我想要
HyperlinkText
而不是HyperlinkButton
,但我不认为Windows Phone 7的Silverlight 3提供了这个功能。