WPF Group Style令人不安的包裹面板包裹

时间:2013-11-15 14:23:15

标签: wpf xaml grouping styling

我使用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>

3 个答案:

答案 0 :(得分:2)

最后找出问题所在。

使用GroupStyle时,我们需要提到GroupStyle.Panel,否则将使用默认面板 这是一个堆叠面板。

宣布为Wrappanel的ItemsPanel不会用作组项目布局的主面板。

                   <GroupStyle.Panel>
                        <ItemsPanelTemplate>
                            <WrapPanel Orientation="Vertical"></WrapPanel>
                        </ItemsPanelTemplate>
                    </GroupStyle.Panel>

答案 1 :(得分:0)

按照here说明设置GroupDescription时,您的项目将分组到GroupItem个集合中,并且每个组都会作为子项添加到垂直StackPanelGroupItem中的项目仍将使用您已定义为ItemsPanel的WrapPanel,但由于您的WrapPanel Orientation设置为Vertical并且您是Vertical StackPanel的后代(它提供无限的垂直可用空间)布局系统不会包装项目,因为它具有以垂直方式显示项目所需的所有空间。

希望它现在更清晰,您可以调整您的解决方案,也许可以将WrapPanel Orientation更改为Horizontal

答案 2 :(得分:0)

下面的代码(xaml)适用于我的情况:

<ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
        <WrapPanel Orientation="Horizontal"/>
    </ItemsPanelTemplate>
</ItemsControl.ItemsPanel>