gpt4 book ai didi

c# - 在 Windows 8.1 GridView 中不显示 Visibility=Collapsed 的项目

转载 作者:可可西里 更新时间:2023-11-01 09:12:55 29 4
gpt4 key购买 nike

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

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

<Grid Width="160" Height="280" Visibility="{Binding IsHidden, Converter={StaticResource InvertedBooleanToVisibilityConverter}}">

此方法适用于 Windows Phone 8.1 XAML,使项目从 ListView 中消失,但不适用于 Windows 8.1 GridView。 Windows 8.1 的问题是,当我将集合中的项目设置为隐藏时,id 从 GridView 中消失,但留下一个空位,因此 GridView 中存在间隙>.

enter image description here

关于如何解决它的任何想法?也许相同的 XAML 样式编辑?

这是重现问题的最小解决方案:https://dl.dropboxusercontent.com/u/73642/gv.zip

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

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

最佳答案

问题出在 GridViewItemsPanel 中。

ItemsWrapGridWrapGrid 都是统一网格。它们的所有子元素将共享相同的高度和宽度。这就是为什么即使折叠 ItemTemplate,空间仍然保留。

你真正需要的是一个WrapPanel。 WINRT 没有内置的 WrapPanel,但 Jerry Nixon 已经构建了一个,您可以从 here 中获取它。 .

更新 GridViewItemsPanel 后,您还有一件事要做。您还需要获取托管您的 ItemtemplateGridViewItem 并将其 Visibility 设置为 Collapsed

    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;
}

我在上面放了一点延迟以使崩溃更加明显。

关于c# - 在 Windows 8.1 GridView 中不显示 Visibility=Collapsed 的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27246555/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com