我遇到了一个奇怪的情况,即如果首次将其可见性设置为折叠并且后者通过绑定设置为可见,则图像将不会显示。
<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
,那么结果看起来像是
如果我打开可视树来检查图像的属性
这说它假设是“可见的”(但显然不是)
如果我在转换器中使用Visibility.Hidden
,那么结果看起来像是
这正是我想要的。但是当我没有显示时,我不希望图标占用额外的空间。
那么..为什么会这样?
答案 0 :(得分:1)
一些猜想:第一项没有宽度(因为它们已折叠),ListView
将列宽设置为0.添加了具有图像但未显示的新项目,因为列没有宽度。
修改:刚刚确认了此行为。