【问题标题】:Image not showing after collapsed图片折叠后不显示
【发布时间】:2016-07-20 01:42:13
【问题描述】:

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

<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,那么结果看起来像

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

那么..为什么会发生这种情况?

【问题讨论】:

  • 我设置了一个类似的最小示例,它工作得很好。

标签: c# wpf .net-4.0


【解决方案1】:

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

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

【讨论】:

  • 我尝试在渲染窗口后将大小设置为 50x50。并打开显示布局崇拜者。我可以清楚地看到 50x50 的框,但看不到图像和工具提示
  • 50x50 的尺寸是多少?如果您仍然设置固定大小,Collapsed 的意义何在?
  • vs2015 中有一个新工具可以让你像浏览器一样在运行时修改元素的属性。我在运行时修改了图像的大小,但它仍然没有显示
  • 此时更改图像大小并不重要。它被列截断了,你需要调整列的大小。
  • 我尝试消耗图像的每一个父母和祖先,但仍然没有运气
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
  • 2017-06-05
  • 2015-10-14
  • 2012-04-02
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多