我使用WrapPanel(垂直方向)作为ItemsControl的项目面板。项目正在扭曲而不添加组样式。当我为items控件添加组样式时,wrappanel不会包装项目,所有项目将在一列中垂直显示,而不是跨越多列。我没有为组头或ItemTemplate使用任何复杂的布局。
这是XAML源..
<Grid>
<ItemsControl ItemsSource="{Binding Items}" Grid.Row="0" ScrollViewer.VerticalScrollBarVisibility="Disabled" ScrollViewer.HorizontalScrollBarVisibility="Visible">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical"
MaxHeight="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Grid}},Path=ActualHeight}"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<StackPanel>
<TextBlock FontSize="15" FontWeight="Bold" Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ItemsControl.GroupStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Name}"/>
<TextBox Text="{Binding Value}" Grid.Column="1" HorizontalAlignment="Right"></TextBox>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
答案 0 :(得分:2)
最后找出问题所在。
使用GroupStyle时,我们需要提到GroupStyle.Panel,否则将使用默认面板 这是一个堆叠面板。
宣布为Wrappanel的ItemsPanel不会用作组项目布局的主面板。
<GroupStyle.Panel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical"></WrapPanel>
</ItemsPanelTemplate>
</GroupStyle.Panel>
答案 1 :(得分:0)
按照here说明设置GroupDescription
时,您的项目将分组到GroupItem
个集合中,并且每个组都会作为子项添加到垂直StackPanel
。 GroupItem
中的项目仍将使用您已定义为ItemsPanel的WrapPanel
,但由于您的WrapPanel
Orientation
设置为Vertical
并且您是Vertical
StackPanel
的后代(它提供无限的垂直可用空间)布局系统不会包装项目,因为它具有以垂直方式显示项目所需的所有空间。
希望它现在更清晰,您可以调整您的解决方案,也许可以将WrapPanel
Orientation
更改为Horizontal
。
答案 2 :(得分:0)
下面的代码(xaml)适用于我的情况:
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>