隐藏GridViewItem和GridView的项目重新定位(Hide GridViewItem a

2019-11-04 03:51发布

正如你可以在上面看到,我需要它本身洗牌对齐。 显然,项目依然存在,有没有办法完全忽略他们?

我有一个ObservableCollection:

 public static volatile ObservableCollection<MyVideo> MyVideoModels = new ObservableCollection<MyVideo>();

这被充满MyVideo网站对象。

它绑定到我的GridView像这样:

public VideosFoundView()
        {
            this.InitializeComponent();
            this.AddVideoFolderGridView.ItemsSource = VideosFoundView.MyVideoModels;
        }

在DataTemplate中我使用了GridView的。

<GridView Grid.Row="2" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" x:Name="AddVideoFolderGridView">
            <GridView.ItemTemplate>
                <DataTemplate>
                    <Border BorderThickness="5">
                        <Image Source="{Binding FullImageLocationOnDisk}"  MaxHeight="300" MaxWidth="200" DoubleTapped="gridViewItem_DoubleTapped" Loaded="gridViewItem_Loaded" Loading="gridViewItem_Loading">
                        </Image>
                    </Border>
                </DataTemplate>
            </GridView.ItemTemplate>
        </GridView>

我有这个GridView控件像这样上面的静态ToggleSwitch:

 <Grid Grid.Row="1">
                <Grid>
                    <TextBlock Text="Ingore Image Not Found"/>
                    <ToggleSwitch x:Name="ToggleSwitchIgnoreImages" Toggled="ignoreImages_Toggled"/>
                </Grid>
            </Grid>

其作用:

 private void ignoreImages_Toggled(object sender, RoutedEventArgs e)
        {
            ToggleSwitch tSwitch = (ToggleSwitch)(sender as ToggleSwitch);
            if (tSwitch.IsOn)
            {
                for(int i = 0; i < VideosFoundView.MyVideoModels.Count; i++)
                {
                    if(VideosFoundView.MyVideoModels[i].FullImageLocationOnDisk == "ms-appx:///Assets/image-not-found.gif")
                    {
                        var gridViewItem = (GridViewItem)this.AddVideoFolderGridView.ContainerFromIndex(i);
                        gridViewItem.Visibility = Visibility.Collapsed;
                    }
                }
            }
            else
            {
                for (int i = 0; i < VideosFoundView.MyVideoModels.Count; i++)
                {
                    //VideosFoundView.MyVideoModels[i].Visibility = "Auto";         
                    var gridViewItem = (GridViewItem)this.AddVideoFolderGridView.ContainerFromIndex(i);
                    gridViewItem.Visibility = Visibility.Visible;
                }
            }
        }

然而问题是,项目仍然会占用空间在我的GridView控件,以及其他项目本身不因此重新定位。

Answer 1:

项目仍然会占用空间的GridView ,当GridViewItem已展开。 这可能是因为ItemTemplate还没有被刷新,空间依然保留。

作为一种变通方法,有工具包的WrapPanel的在项目UWP端口WinRTXamlToolkit 。

你可以从它的NuGet 。

然后在页面中添加此前缀:

xmlns:toolkit="using:WinRTXamlToolkit.Controls"

现在你可以使用<toolkit:WrapPanel Orientation="Horizontal" ></toolkit:WrapPanel>因为它以前。

例如:

<GridView x:Name="AddVideoFolderGridView">
    <GridView.ItemsPanel>
        <ItemsPanelTemplate>
            <toolkit:WrapPanel Orientation="Horizontal"  >
            </toolkit:WrapPanel>
        </ItemsPanelTemplate>
    </GridView.ItemsPanel>
    <GridView.ItemTemplate>
        <DataTemplate>
            <Border BorderThickness="5">
                <Image Source="{Binding FullImageLocationOnDisk}"  MaxHeight="300" MaxWidth="200" DoubleTapped="gridViewItem_DoubleTapped" Loaded="gridViewItem_Loaded" Loading="gridViewItem_Loading">
                </Image>
            </Border>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>


Answer 2:

从这里解决方法: 不显示与可视化项目=在Windows 8.1的GridView折叠

tldr:编辑你的GridView的模板,并与WrapPanel更换ItemsWrapGrid在ItemsPanelTemplate你可以在这里找到http://codepaste.net/8gr5go



文章来源: Hide GridViewItem and reposition items in GridView