堆叠面板中未显示某些子项

时间:2019-02-07 22:43:29

标签: c# xaml uwp windows-community-toolkit

编辑#2:

这是我为重现问题而创建的最低Github Repo


我相信当某些组为空时,这是在实现分组ListViewBase虚拟化的一个错误

我有一个listview,其项目面板设置为StackPanel,因为我需要将组样式面板设置为交错的面板,这不适用于项目堆栈面板。

现在的问题是,在27个组中,仅显示16个组。我在另一个列表视图上对其进行了测试,并确认了问题在于堆栈面板仅显示了数量有限的子项(奇怪的是,在我的测试中,它不是16个,而是22个)。

我尝试过VirtualizingStackPanel,但与StackPanel不同,尽管设置了它的所有子项,但我似乎无法在设置其MaxWidth后将其居中显示在列表视图中。

这是我的XAML:

  <ListView ItemsSource="{Binding Source={StaticResource NoteViewSource}}"
              Padding="0 0"
              ItemTemplate="{StaticResource NormalNoteTemplate}"
              x:Name="ListView"
              IsItemClickEnabled="True"
              ItemClick="ListView_OnItemClick"
              SelectionChanged="ListView_OnSelectionChanged"
              SelectionMode="Extended">
        <ListView.Footer>
            <Border Height="80" />
        </ListView.Footer>
        <ListView.GroupStyle>
            <GroupStyle HidesIfEmpty="False">
                <GroupStyle.HeaderTemplate>
                    <DataTemplate x:DataType="viewModels:NoteList">
                            <TextBlock Text="{x:Bind Header, Mode=OneWay}"
                                       FontSize="18"
                                       Margin="0,16,0,8"
                                       FontWeight="Bold" />
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
                <GroupStyle.Panel>
                    <ItemsPanelTemplate>
                        <uwp:SGStaggeredPanel DesiredColumnWidth="220"/>
                    </ItemsPanelTemplate>
                </GroupStyle.Panel>
            </GroupStyle>
        </ListView.GroupStyle>
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <!-- custom group panel won't work if this is item panel-->
                <StackPanel />
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
    </ListView>

编辑:

我进一步检查了它,似乎StackPanel并不是问题,因为它的子代数为22。这意味着它的子代数不正确,这意味着问题出在CollectionViewSource或ListView中,仅传递了22个项目。 StackPanel,而不是全部计数。

但是我不明白的是为什么VirtualizingStackPanel可以工作?

1 个答案:

答案 0 :(得分:1)

考虑使用ItemsStackPanel而不是使用StackPanel。它旨在与团体合作。

 <ItemsPanelTemplate>

    <ItemsStackPanel />

  </ItemsPanelTemplate>

来自Microsoft docs

  • ItemsStackPanel :将ItemsControl的子元素排列为单行,可以水平或垂直定向。支持基于像素的UI虚拟化和分组布局。*

enter image description here