代码之家  ›  专栏  ›  技术社区  ›  Matthew

可选在层次数据模板中显示图像

  •  0
  • Matthew  · 技术社区  · 14 年前

    我的树视图中有几个层次结构数据模板。在其中一个示例中,如果是本例中的属性,我希望在标签右侧显示图像 HasMissingFit 为真,否则不应显示图像。

    如果我想让图像一直存在,我知道我可以用一个 Image 使用转换器标记,但如果属性为false,则根本不应显示图像。

    5 回复  |  直到 13 年前
        1
  •  2
  •   Simon D.    14 年前

    最简单的方法可能是将图像的Visibility属性绑定到HasMissingFit,使用转换器将true转换为visible,将false转换为hidden(如果您想将该空间用于其他用途,则折叠)。 如果您真的希望图像不存在,则需要在图像的某个父级中创建触发器。使用自定义样式定义ContentControl,并在样式中定义触发器,如果HasMissingFit==true,则将图像设置为内容。

        2
  •  2
  •   Robert Rossney    14 年前

    您当然不需要编写值转换器或模板选择器的代码:只需设置 Image Visibility Collapsed 然后将样式附加到 图像 使用A 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>
    

    根据您的布局,设置 能见度 Hidden 坍塌 ;这样,图像的出现或消失不会影响布局的流程。

        3
  •  1
  •   Szymon Rozga    14 年前

    我可以考虑以下几种选择:

    1. 可以将此属性绑定到图像的可见性。在这种情况下,图像存在,但不会绘制到屏幕上。
    2. 可以创建一个DataTemplateSelector,该选择器基于此属性选择正确的DataTemplate。
        4
  •  1
  •   John Gardner    14 年前

    与图像折叠/可见时的转换器相关,您也可以执行将true转换为ImageSource或将false转换为null的转换器。

        5
  •  0
  •   Wonko the Sane    14 年前

    我首先想到的是使用一个图像,绑定到一个属性,如果设置了另一个属性,则返回所需的图像,否则返回空值。

    这使得它很容易扩展,以防稍后您决定为不同的属性使用不同的图标。

    代码背后:

    public ImageSource MyImage
    {
        get
        {
            if (this.IsImageFit)
                return .....;   // return an ImageSource using your image
            else
                return null;
        }
    }