折叠后图像未显示

时间:2016-07-19 17:16:05

标签: c# wpf .net-4.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

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

那么..为什么会这样?

1 个答案:

答案 0 :(得分:1)

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

修改:刚刚确认了此行为。