我的TreeView中有几个HierarchicalDataTemplates。在其中一个中,如果此例HasMissingFit
中的属性为真,我想在标签右侧显示图像,否则根本不应显示图像。
如果我希望图像始终存在,我知道我只能使用带有转换器的Image
标签来执行此操作,但如果属性为false,则根本不应显示图像。< / p>
答案 0 :(得分:2)
最简单的方法可能是将Image的Visibility-Property绑定到HasMissingFit,使用Converter将true转换为Visible,将false转换为Hidden(如果你想将该空间用于其他内容,则折叠)。 如果您希望图像真的不存在,则需要在图像的某个父级中创建触发器。使用自定义样式定义ContentControl,并在样式中定义触发器,如果HasMissingFit == True,则将图像设置为内容。
答案 1 :(得分:2)
您当然不需要对值转换器或模板选择器进行编码:只需将Image
的{{1}}设置为Visibility
,然后将样式附加到{{ 1}}使用Collapsed
,例如:
Image
根据您的布局,将DataTrigger
设置为<Style TargetType="Image">
<Style.Triggers>
<DataTrigger Binding="{Binding HasMissingFit}" Value="True">
<DataTrigger.Setters>
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger.Setters>
</DataTrigger>
</Style.Triggers>
</Style>
比Visibility
更有意义;这样,出现或消失的图像不会影响布局的流程。
答案 2 :(得分:1)
我可以想到几个选项:
答案 3 :(得分:1)
与图像的折叠/可见光上的转换器相关,您也可以执行将true转换为imagesource的转换器,或将false转换为null
答案 4 :(得分:0)
我首先想到的是使用一个Image,绑定到一个属性,如果设置了另一个属性,该属性返回你想要的图像,否则为null。
这使得它易于扩展,以防您稍后决定为不同的属性使用不同的图标。
在代码隐藏中:
public ImageSource MyImage
{
get
{
if (this.IsImageFit)
return .....; // return an ImageSource using your image
else
return null;
}
}