在Windows 8.1 GridView中不显示可见性为Collapsed的项。

8 浏览
0 Comments

在Windows 8.1 GridView中不显示可见性为Collapsed的项。

我有一个Windows 8.1应用程序,它有一个绑定到自定义(可排序,去重)可观察集合的GridView。在这个集合中,我会进行一些重型过滤,并为每个项目设置一个IsHidden标志。

在项目的数据模板中,有一个条件,如果IsHidden标志设置为true,则使项目折叠。


这种方法在Windows Phone 8.1 XAML中可以使用,在ListView中使项目消失,但在Windows 8.1 GridView中不起作用。在Windows 8.1中的问题在于,当我将集合中的项目设置为隐藏时,它从GridView中消失,但留下一个空位置,所以GridView中存在一个空隙。

\"enter

有什么解决方法吗?可能是同样的XAML样式编辑吗?

这里有一个最小的解决方案来重现问题:https://dl.dropboxusercontent.com/u/73642/gv.zip

我尝试了将项目的宽度和高度绑定到隐藏标志,并在隐藏项目时将其设置为0,但这没有帮助,GridView中仍然存在一个空隙。

更新:一个解决方法是过滤实际绑定的集合,但由于业务需求,这是不可能的。

admin 更改状态以发布 2023年5月21日
0
0 Comments

我尝试了您的示例解决方案,并将其更改为ListView。当网格本身被隐藏时,它展现出相同的行为。我没有XAML Spy来验证,但似乎任何基于列表的控件都会为列表中的每个项分配一个已呈现的项。

我将您的点击处理程序更改为ds.RemoveAt(5);,而不是隐藏该项,元素会以很好的动画从视图中移除。这似乎符合预期,是一个有趣的发现。

0
0 Comments

问题在于GridView中的ItemsPanelItemsWrapGridWrapGrid都是统一的网格。它们的所有子元素都将共享相同的高度和宽度。这就是为什么即使你折叠了ItemTemplate,空间仍然被保留的原因。\n\n你真正需要的是一个WrapPanel。WINRT没有内置的WrapPanel,但Jerry Nixon已经建立了一个,你可以从这里下载。\n\n在更新GridViewItemsPanel之后,你还需要做的一件事是,你需要获取托管你ItemTemplateGridViewItem并将其Visibility设置为Collapsed。\n\n

\n

    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        ds[5].IsHidden = true;
        await Task.Delay(1000);
        var gridViewItem =(GridViewItem)this.gv.ContainerFromIndex(5);
        gridViewItem.Visibility = Visibility.Collapsed;
    }

\n

\n\n我上面加了一点延迟,以使折叠更明显。

0