Чтобы изменить ориентацию, вам необходимо установить GroupStyle.Panel
. Из-за вашего требования расположить элементы в несколько строк, вы должны использовать WrapPanel
.
Чтобы заставить его вести себя правильно, вы должны отключить горизонтальный ScrollViewer
из ListView
(чтобы позволить элементам переноситься) и задайте фиксированную высоту ListView
(чтобы сделать вертикальную ScrollViewer
видимой).
Поскольку вы не изменяете макет GroupItem
и ListView
, вы можете безопасно удалить GroupStyle.ContainerStyle
(по крайней мере, Controltemplate
) и ListView.ItemsPanel
шаблон. Фактически установка ItemsPanelTemplate
из ListBox
или ListView
явно на StackPanel
или вообще на что-то иное, кроме VirtualizingPanel
, удаляет возможность виртуализировать элементы. Виртуализация пользовательского интерфейса значительно повышает производительность, поэтому отключать ее не стоит.
<ListView ItemsSource="{Binding Source={StaticResource cvs}}"
Height="400"
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.Panel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</GroupStyle.Panel>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock
Padding="5,0,0,0"
FontSize="14"
FontWeight="Bold"
Text="{Binding Name}" />
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListView.GroupStyle>
</ListView>