この回答のとおり、ItemsPanelがWrapPanelであるListBoxを実装していますが、ひねりがあります。私のItemsSourceはグループ化されたCollectionViewです。リストボックスにGroupStyle
適用すると、その質問に示されているラッピングは機能しません。グループは常に垂直に表示されます。
私のアプリをスヌーピングしている理由は次のとおりです。
ご覧のとおり、ListBoxのItemsPanelTemplateとして定義されているWrapPanelは、各GroupItem内のItemsPresenterに表示されます。GroupItem自体を含むために、暗黙の垂直方向のStackPanel(ピンク色のボックスの一番上のアイテム)が作成されます。
この動作をオーバーライドして、GroupItemsをWrapPanelに配置する方法はありますか?ListBox全体を再テンプレート化する必要がありますか?
更新: ListBoxとCollectionViewグループ化で実際に行っていることを説明するために、少しXAMLを投稿しましょう。
<Grid>
<ListBox ItemsSource="{Binding}"
ScrollViewer.VerticalScrollBarVisibility="Disabled"
SelectionMode="Multiple"
ItemContainerStyle="{StaticResource itemStyle}">
<ListBox.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" FontWeight="Bold"/>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListBox.GroupStyle>
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type WpfApplication1:Item}">
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Name}" FontSize="10"/>
<TextBlock Text="{Binding Amount, StringFormat={}{0:C}}" FontSize="10"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</Grid>
これGroupStyle
はその中心です。これを削除すると、GroupItemsはレンダリングされず、スクリーンショットの(StackPanel)98の代わりにWrapPanel(上のスクリーンショットのGroupItemの下に表示されます)が表示されます。