我有一个 ListBox 显示人员姓名、电子邮件、部门等的列表。有一个 DataTemplate 有几个 TextBlocks 来显示每个属性。其中一个 TextBlocks 包装了一个超链接以显示电子邮件地址,如下所示:
<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 的文本或其他东西......
请帮我解决这个问题。
谢谢!