2016-07-19 40 views
0

我遇到了一种奇怪的情况,如果图像的可见性首先设置为折叠而后者设置为通过绑定可见,则图像不会显示。折叠后图像不显示

<ListView Grid.Row="0" ItemsSource="{Binding SystemCheckEntries}"> 
      <GridViewColumn DisplayMemberBinding="{Binding State}" /> 
      <GridViewColumn> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <Image Source="info.png" 
           Height="14" 
           ToolTip="{Binding Message}" 
           Visibility="{Binding Message, Converter={StaticResource StringNullOrEmptyToVisibilityConverter}}"/> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

转换器:

public class StringNullOrEmptyToVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return string.IsNullOrEmpty((string) value) ? Visibility.Collapsed : Visibility.Visible; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

如果我在转换器使用Visibility.Collapsed那么结果看起来像
enter image description here

,如果我打开了可视化树检查图像的特性
enter image description here
它说它假设是“可见的”(但显然不是)

如果我在使用转换器然后Visibility.Hidden的结果看起来像
enter image description here

这正是我想要的。但是,我不希望图标在没有显示时占用额外的空间。

那么......为什么会这样呢?

+0

我设置了一个类似的简单例子,它工作得很好。 –

回答

1

一些猜想:第一个项目没有宽度(因为它们已折叠),ListView将列宽设置为0.添加了具有图像但未显示的新项目,因为该列没有宽度。

编辑:刚刚确认了这种行为。

+0

我试图在窗口渲染后将大小设置为50x50。并打开显示布局爱好者。我可以清楚地看到50x50盒子,但不是图像,也没有工具提示 – Steve

+0

你是什么尺寸的50x50?如果你设置了一个固定的尺寸,那么'Collapsed'会有什么意义呢? –

+0

这是一个vs2015中的新工具,它允许您在运行时像浏览器一样修改元素的属性。我在运行时修改了图像的大小,但仍未显示 – Steve