Некоторые дочерние элементы не отображаются на панели стека - PullRequest
0 голосов
/ 08 февраля 2019

РЕДАКТИРОВАТЬ # 2:

Вот минимальный Репозиторий Github Я создал, чтобы воспроизвести проблему.


Я считаю, что этоошибка в реализации виртуализации сгруппированной ListViewBase, когда некоторые группы пусты

У меня есть просмотр списка, панель элементов которого установлена ​​в 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 голосов
/ 09 февраля 2019

Вместо использования StackPanel рассмотрите возможность использования ItemsStackPanel.Он предназначен для работы с группами.

 <ItemsPanelTemplate>

    <ItemsStackPanel />

  </ItemsPanelTemplate>

От Microsoft документы :

  • ItemsStackPanel : Размещает дочерние элементы ItemsControl водна линия, которая может быть ориентирована горизонтально или вертикально.Поддерживает виртуализацию пользовательского интерфейса на основе пикселей и сгруппированные макеты. *

enter image description here

...