Вы можете использовать UniformGrid
в качестве ItemsPanelTemplate
и привязать свойство Rows
к количеству элементов в ItemsControl
, например:
<ItemsControl>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="{Binding Items.Count, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}" IsItemsHost="True"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Я не тестировал этот код, поэтому вам нужно проверить его, но я думаю, что идея ясна.
РЕДАКТИРОВАТЬ: Как указал Джон ниже, этот код еще проще:
<ItemsControl>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="1" IsItemsHost="True"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>