折叠后图像不显示
Image not showing after collapsed
我 运行 遇到了一种奇怪的情况,如果图像的可见性首先设置为折叠,然后通过绑定设置为可见,图像将不会显示。
<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
那么结果看起来像
如果我打开可视化树来检查图像的属性
它说它应该是 "Visible" (但显然不是)
如果我在转换器中使用 Visibility.Hidden
那么结果看起来像
这正是我想要的。但是我不希望图标在不显示时占用额外的 space 。
所以..为什么会这样?
一些猜想:第一个项目没有宽度(因为它们已折叠),ListView
将列宽设置为 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
那么结果看起来像
如果我打开可视化树来检查图像的属性
它说它应该是 "Visible" (但显然不是)
如果我在转换器中使用 Visibility.Hidden
那么结果看起来像
这正是我想要的。但是我不希望图标在不显示时占用额外的 space 。
所以..为什么会这样?
一些猜想:第一个项目没有宽度(因为它们已折叠),ListView
将列宽设置为 0。添加了具有图像但未显示的新项目,因为该列有没有宽度。
编辑:刚刚确认了这个行为。