【发布时间】:2010-12-29 18:53:43
【问题描述】:
我正在尝试使文本块中所有可点击的 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 提供了这种功能。
【问题讨论】:
标签: silverlight windows-phone-7