人の名前、電子メール、部門などのリストを表示する ListBox があります。各プロパティを表示するためのいくつかの TextBlocks を持つ DataTemplate があります。これらの TextBlocks の 1 つは、ハイパーリンクをラップして、電子メール アドレスを次のように表示します。
<TextBlock>
<Hyperlink NavigateUri="{Binding Email}">
<TextBlock Text="{Binding Email}" />
</Hyperlink>
</TextBlock>
これは問題なく機能しますが、その人が電子メール アドレスを持っていない場合、TextBlock は自動的に折りたたまれません。そこで、値コンバーターを作成し、次のようなスタイルで使用しました (簡略化):
string s = (String) value;
if (s == ""){
return Visibility.Collapsed;
}
return Visibility.Visible;
これは、ValueConverter を使用したスタイルです。
<Style x:Key="ResultItemTextBoxStyle">
<Setter Property="TextBlock.Visibility" Value="{Binding Path=Text, RelativeSource={RelativeSource Self},
Converter={StaticResource StringToVisibilityConverter}}"/>
</Style>
そして、コンバーターを呼び出すスタイルを TextBlock に追加しました。
<TextBlock Style="{StaticResource ResultItemTextBoxStyle}">
<Hyperlink NavigateUri="{Binding Email}">
<TextBlock Text="{Binding Email}" />
</Hyperlink>
</TextBlock>
この変更後、電子メール アドレスは表示されません。値コンバーターでは、TextBlock のテキストは常に空で、Visibility.Collapsed が返されます。ハイパーリンクが読み込まれる前に TextBlock のテキストを評価しているようなものです...
これを理解するのを手伝ってください。
ありがとう!