Попробуйте WrapPannel, который разложит элементы по горизонтали, пока не останется свободного места, а затем перейдет к следующей строке.
Вы также можете использовать UniformGrid, который разложит элементы взадайте количество строк или столбцов.
То, как мы размещаем элементы в порядке, используя эти другие панели в ListView, ListBox или любой форме ItemsControl, заключается в изменении свойства ItemsPanel.Установив ItemsPanel, вы можете изменить его со стандартной StackPanel, которая используется ItemsControls.С WrapPanel мы также должны установить ширину, как показано здесь.
<ListView>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Width="{Binding (FrameworkElement.ActualWidth), RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}"
ItemWidth="{Binding (ListView.View).ItemWidth, RelativeSource={RelativeSource AncestorType=ListView}}"
MinWidth="{Binding ItemWidth, RelativeSource={RelativeSource Self}}"
ItemHeight="{Binding (ListView.View).ItemHeight, RelativeSource={RelativeSource AncestorType=ListView}}" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
...
</ListView>