Виртуализированная панель, которая равномерно размещает детей - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь использовать GridView, который будет равномерно распределять дочерний элемент, очень похоже на UnifromGrid из Community Toolkit , но виртуализирующий.

Причина, по которой я не могу использовать значение по умолчанию Itemspanel из GridView, заключается в том, что я думаю, что он определяет размер всех других ячеек по 1-й ячейке, посмотрите на это:

enter image description here

Обратите внимание на пустые места справа, а также на элементы с большими размерами обрезаются по размеру 1-го элемента.

Я пытался использовать `UniformGrid ', но он не виртуализирован, и мое приложение иногда сталкивается с трудностями и становится очень медленным при большом количестве элементов.

Я также пытался расширить VirtualizingPanel, чтобы создать пользовательский Panel, но пока невозможно.

Есть ли что-то, что я могу сделать сейчас, чтобы решить эту проблему? Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Вариант 1: Если вы не возражаете против ячеек фиксированного размера, вы можете указать это на ItemsPanel.

<GridView>
    <GridView.ItemsPanel> 
        <ItemsPanelTemplate>
            <ItemsWrapGrid Orientation="Horizontal" ItemHeight="200" ItemWidth="200"/>  
        </ItemsPanelTemplate> 
    </GridView.ItemsPanel> 
</GridView> 

Вариант 2: В предварительных версиях WinUI NuGet от Microsoft есть новый элемент управления списком под названием «Repeater», который в сочетании с его «UniformGridLayout» может делать, как вы хотите.

В настоящий момент вы можете найти образец этого в репозитории XamlControlsGallery здесь: https://github.com/Microsoft/Xaml-Controls-Gallery/blob/master/XamlControlsGallery/ControlPages/ItemsRepeaterPage.xaml

Обратите внимание, что это все еще предварительная версия, так что документации очень мало, и площадь поверхности элементов управления, вероятно, изменится (и даже изменилась несколько раз). Repeater также не является дочерним для Selector или ListView, поэтому вы теряете автоматические ItemContainers, SelectionModes, ItemClicking и т. Д. Вам придется вручную добавлять их по своему усмотрению - ретранслятор по сути является новым базовым классом, представляющим список, более похожим на ItemsControl а не GridView или ListView.

Это сопровождается предостережениями: виртуализация работает только на SDK 17763 и выше - на более низком SDK также необходимо использовать ScrollAnchorProvider, который также включает виртуализацию, как показано в строке 110 примера.

0 голосов
/ 25 января 2019

А как насчет использования AdaptiveGridView элемента управления из набора инструментов сообщества Windows?Это позволит вам автоматически изменять размер элементов в зависимости от доступной ширины.Однако сделать элементы ровно квадратными будет непросто, так как они меняют ширину по мере расширения окна.

...