根据这个答案,我正在实现一个 ListBox,其 ItemsPanel 是 WrapPanel ,但有一个转折:我的 ItemsSource 是一个分组的CollectionView。将 aGroupStyle
应用于我的 ListBox 后,该问题中显示的换行不起作用:组始终垂直显示。
窥探我的应用程序,原因如下:
如您所见,WrapPanel,定义为我的ListBox 的ItemsPanelTemplate,出现在每个GroupItem内的ItemsPresenter 中;创建一个隐式的、垂直方向的 StackPanel(粉红色框中的顶部项目)以包含 GroupItems 本身。
有没有办法覆盖这种行为,所以 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 不会被渲染,并且 WrapPanel(您可以在上面的屏幕截图中看到出现在 GroupItem 下方)代替屏幕截图中的 (StackPanel) 98 出现。