Я создал ListBox для отображения элементов в группах, где группы переносятся справа налево, когда они больше не могут поместиться в пределах высоты панели ListBox. Таким образом, группы будут выглядеть примерно так в списке, где высота каждой группы произвольна (например, группа 1 в два раза больше группы 2):
[ 1 ][ 3 ][ 5 ]
[ ][ 4 ][ 6 ]
[ 2 ][ ]
Следующий XAML работает правильно, поскольку он выполняет перенос и позволяет горизонтальной полосе прокрутки появляться, когда элементы выходят с правой стороны ListBox.
<ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.GroupStyle>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical"
Height="{Binding Path=ActualHeight,
RelativeSource={RelativeSource
FindAncestor,
AncestorLevel=1,
AncestorType={x:Type ScrollContentPresenter}}}"/>
</ItemsPanelTemplate>
</ListBox.GroupStyle>
</ListBox>
Проблема возникает, когда группа элементов длиннее, чем высота WrapPanel. Вместо того чтобы позволить вертикальной полосе прокрутки отображаться для просмотра группы элементов отсечения, элементы в этой группе просто обрезаются. Я предполагаю, что это побочный эффект привязки высоты в WrapPanel - полоса прокрутки считает, что ее не нужно включать.
Есть ли способ включить полосу прокрутки или другой способ обойти эту проблему, которую я не вижу?