【问题标题】:WPF Group Style is disturbing wrap panel wrappingWPF 组样式正在干扰包装面板包装
【发布时间】:2013-11-15 14:23:14
【问题描述】:

我使用 WrapPanel(垂直方向)作为 ItemsControl 的项目面板。项目在不添加组样式的情况下正确变形。当我为项目控件添加组样式时,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>

【问题讨论】:

    标签: wpf xaml grouping styling


    【解决方案1】:

    终于找出问题所在。

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

    已声明为 Wrappanel 的 ItemsPanel 将不会用作组项布局的主面板。

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

    【讨论】:

    • 我正在使用 wrappanel 将项目包装在项目控件中(请参阅我的问题中的 ItemsControl.ItemsPanel 部分。)。当我们使用组样式时,wpf 将忽略项目控制面板并使用组面板,因为它需要实现组样式。所以在我的情况下,它忽略了我的 wrappanle 并在组样式中使用默认面板,即 stackpanel
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-08
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多