折叠后图像不显示

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。添加了具有图像但未显示的新项目,因为该列有没有宽度。

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