У меня есть ItemsControl с WrapPanel как ItemsPanel. ItemsControl находится внутри ScrollViewer.
В зависимости от ширины окна ItemsControl / WrapPanel должно иметь больше столбцов, чтобы лучше использовать экран (и чтобы пользователю приходилось меньше прокручивать).
Если я установил для WrapPanel значение Orientation = Horizontal, он будет работать, как ожидалось. Но если я установил ориентацию по вертикали, ItemsControl / WrapPanel покажет только один столбец.
Разница в том, что мне нравится, чтобы столбцы были похожи на газетные, а именно:
A E I
B F J
C G
D H
Но если для WrapPanel установлено значение Horizontal, столбцы будут похожи на:
A B C
D E F
G H I
J
Как я могу настроить WrapPanel на такое поведение?
Конечно, я мог ограничить высоту. Конечно, я мог бы реализовать это с помощью некоторой умной логики, которая учитывает количество элементов из источника, а также ширину окна. Но это было бы сложно и, вероятно, беспорядочно, что никто другой никогда бы не понял (или даже я, если я пересмотрю это через пару лет).
Надеюсь, что-то подобное уже существует в WPF.
Вот псевдо-XAML-код
<ScrollViewer>
<StackPanel>
<!-- Some other stuff -->
<ItemsControl ItemsSource="{Binding … }">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Width="300"><!-- … --></Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<!-- Some more other stuff -->
</StackPanel>
</ScrollViewer>
Он работает с Orientation = Horizontal (но тогда ячейки находятся в неправильном порядке), но показывает только один столбец, когда Orientation = Vertical.