私は、クリック可能なURIであるすべての単語をtextblockで作成しようとしています。Silverlight:ハイパーリンクボタンをテキストブロックのように表示させますか?
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に設定して修正しようとしましたが、問題は解決していませんでした。
他のアイデアはありますか?実際、HyperlinkButton
の代わりにHyperlinkText
が必要ですが、Windows Phone 7用のSilverlight 3はそれを提供しているとは思いません。
にタップジェスチャーを追加しますテキストブロックも同様に実行可能です –