2011-03-10 90 views
1

我有一个组里面有物品,我希望那个组有一个子组。C#WPF工具包DataGrid - 组内集团?

主要群体:“窗口”,“Linux的”,“苹果”和子组:“数据”,“基本”,“高级”

子群体将是那些将包含行项目。另外,每个主要组可以有不同的子组。

我该怎么做?

下面是我的一些代码:

<Window.Resources> 
    <CollectionViewSource x:Key="OSGroups"> 
     <CollectionViewSource.GroupDescriptions> 
      <PropertyGroupDescription PropertyName="os"/> 
     </CollectionViewSource.GroupDescriptions> 
    </CollectionViewSource> 

    <Style x:Key="GroupContainerStyle" TargetType="{x:Type GroupItem}"> 
     <Style.Resources> 
      <LinearGradientBrush x:Key="OutBrush" StartPoint="0,0" EndPoint="0,1"> 
       <GradientStop Offset="0" Color="#FEB74B"/> 
       <GradientStop Offset="1" Color="#F19201"/> 
      </LinearGradientBrush> 
     </Style.Resources> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type GroupItem}"> 
        <Expander IsExpanded="True" Background="{StaticResource OutBrush}" BorderThickness="0"> 
         <Expander.Header> 
          <Grid> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="Auto"/> 
           </Grid.ColumnDefinitions> 

           <StackPanel Grid.Column="0" Orientation="Horizontal" Margin="0,0,10,0"> 
            <TextBlock Text="{Binding Path=Name}"/> 
           </StackPanel> 
          </Grid> 
         </Expander.Header> 
         <ItemsPresenter /> 
        </Expander> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 
<Grid> 
    <wpfToolkit:DataGrid Name="CommandsDataGrid" AutoGenerateColumns="False" IsReadOnly="True" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="False" CanUserSortColumns="False" ItemsSource="{Binding Source={StaticResource OSGroups}}" CellStyle="{StaticResource CellStyle}" HeadersVisibility="Column" Height="250" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
     <wpfToolkit:DataGrid.GroupStyle> 
      <GroupStyle ContainerStyle="{StaticResource GroupContainerStyle}"> 
       <GroupStyle.Panel> 
        <ItemsPanelTemplate> 
         <wpfToolkit:DataGridRowsPresenter/> 
        </ItemsPanelTemplate> 
       </GroupStyle.Panel> 
      </GroupStyle> 
     </wpfToolkit:DataGrid.GroupStyle> 
     <wpfToolkit:DataGrid.Columns> 
      <wpfToolkit:DataGridTextColumn Header="Command" Binding="{Binding Path=command}" /> 
      <wpfToolkit:DataGridTextColumn Header="Description" Width="*" Binding="{Binding Path=description}" /> 
     </wpfToolkit:DataGrid.Columns> 
    </wpfToolkit:DataGrid> 
</Grid> 

回答

1

注意,压痕只有一个子组的工作,因为我们只有“IsBottomLevel”,而不是“级别”。

<CollectionViewSource x:Key="OSGroups"> 
     <CollectionViewSource.GroupDescriptions> 
      <PropertyGroupDescription PropertyName="os"/> 
      <PropertyGroupDescription PropertyName="subGroup"/> 
     </CollectionViewSource.GroupDescriptions> 
    </CollectionViewSource> 
    <Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type GroupItem}"> 
        <Expander IsExpanded="True"> 
         <Expander.Style> 
          <Style TargetType="{x:Type Expander}"> 
           <Style.Triggers> 
            <DataTrigger Binding="{Binding IsBottomLevel}" Value="True"> 
             <Setter Property="Margin" Value="20,0,0,0" /> 
            </DataTrigger> 

           </Style.Triggers> 
          </Style> 
         </Expander.Style> 
         <Expander.Header> 
          <TextBlock Text="{Binding Name}"/> 
         </Expander.Header> 
         <ItemsPresenter Margin="-10,0,0,0" /> 
        </Expander> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
0

您可以在DataGrid.GroupStyle元素中定义任何样式。考虑下面的xaml,在这里我定义了两个组容器样式,即GroupContainerStyleSecondGroupContainerStyle。现在为主组(第一级)GroupConstainerStyle将被应用,并且您的子组(第二级)SecondGroupContainerStyle将自动应用。

SecondGroupContainerStyle你可以改变缩进像spasrto如何做。

<wpfToolkit:DataGrid Name="CommandsDataGrid" AutoGenerateColumns="False" IsReadOnly="True" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="False" CanUserSortColumns="False" ItemsSource="{Binding Source={StaticResource OSGroups}}" CellStyle="{StaticResource CellStyle}" HeadersVisibility="Column" Height="250" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
    <wpfToolkit:DataGrid.GroupStyle> 
     <GroupStyle ContainerStyle="{StaticResource GroupContainerStyle}"> 
      <GroupStyle.Panel> 
       <ItemsPanelTemplate> 
        <wpfToolkit:DataGridRowsPresenter/> 
       </ItemsPanelTemplate> 
      </GroupStyle.Panel> 
     </GroupStyle> 

     <GroupStyle ContainerStyle="{StaticResource SecondGroupContainerStyle}"> 
      <GroupStyle.Panel> 
       <ItemsPanelTemplate> 
        <wpfToolkit:DataGridRowsPresenter/> 
       </ItemsPanelTemplate> 
      </GroupStyle.Panel> 
     </GroupStyle>   
    </wpfToolkit:DataGrid.GroupStyle> 

</wpfToolkit:DataGrid>