(可选)在HierarchicalDataTemplate中显示图像

时间:2010-08-27 14:01:51

标签: c# wpf styles

我的TreeView中有几个HierarchicalDataTemplates。在其中一个中,如果此例HasMissingFit中的属性为真,我想在标签右侧显示图像,否则根本不应显示图像。

如果我希望图像始终存在,我知道我只能使用带有转换器的Image标签来执行此操作,但如果属性为false,则根本不应显示图像。< / p>

5 个答案:

答案 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)

我可以想到几个选项:

  1. 您可以将此属性绑定到图像的可见性。在这种情况下,图像存在但不会被绘制到屏幕上。
  2. 您可以创建一个DataTemplateSelector,根据此属性选择正确的DataTemplate。

答案 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;
    }
}