Я недавно исследовал, как этого добиться в WPF, и нашел хорошее решение. То, что я хотел, было в режиме репликации списка в проводнике Windows, то есть сверху вниз, затем слева направо.
В основном то, что вы хотите сделать, переопределяет свойство ListBox.ItemsPanel
, чтобы использовать WrapPanel с его ориентацией, установленной на Вертикаль.
<ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
Однако это будет медленным при загрузке большого набора данных, так как панель переноса не виртуализирована. Это важно. Так что теперь эта задача становится немного более сложной, так как теперь вам нужно написать свою собственную VirtualizedWrapPanel, расширив VirtualizedPanel и реализовав IScrollInfo.
public class VirtualizedWrapPanel : VirtualizedPanel, IScrollInfo
{
// ...
}
Это все, что я получил в своем исследовании, прежде чем перейти к другому заданию. Если вам нужна дополнительная информация или примеры, пожалуйста, прокомментируйте.
UPDATE . У Бен Констебля есть отличная серия о том, как реализовать IScrollInfo .
Всего 4 статьи. Действительно хорошее чтение.
С тех пор я внедрил виртуализированную панель переноса, это не легкая задача даже с помощью вышеуказанной серии статей.