代码之家  ›  专栏  ›  技术社区  ›  Vlad Bezden

更改ListView中不同类别项目的(启用/禁用)GroupStyle

  •  3
  • Vlad Bezden  · 技术社区  · 16 年前

    我如何在两者之间切换 GroupStyles 暂时 ListView GroupStyle 标题名为null,如果不是null,则使用自定义名称 群体风格 主题我试过了 GroupStyleSelector ,它不起作用,因为它适用于多级分组,而在我的例子中,我只有一级分组。

    如果是的话,怎么办?

    风俗 群体风格 :

        <Style x:Key="grouping"
               TargetType="{x:Type GroupStyle}">
            <Setter Property="ContainerStyle">
                <Setter.Value>
                    <Style TargetType="{x:Type GroupItem}">
                        <Setter Property="Margin"
                                Value="0,0,0,5" />
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type GroupItem}">
                                    <Expander IsExpanded="False"
                                              BorderBrush="#FFA4B97F"
                                              BorderThickness="0,0,0,1">
                                        <Expander.Header>
                                            <DockPanel>
                                                <TextBlock FontWeight="Bold"
                                                           Text="{Binding Name}"
                                                           Margin="0"
                                                           Width="250" />
                                                <TextBlock FontWeight="Bold"
                                                           Text="{Binding Path=Items[0].StartTime, StringFormat=T}" />
                                            </DockPanel>
                                        </Expander.Header>
                                        <Expander.Content>
                                            <ItemsPresenter />
                                        </Expander.Content>
                                    </Expander>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </Setter.Value>
            </Setter>                    
        </Style>
    

    真诚地

    1 回复  |  直到 13 年前
        1
  •  4
  •   Vlad Bezden    16 年前

    可以

    我找到了解决办法。基本上,我需要构建DataTrigger并检查其中的类别,如果它匹配,则使用不同的GroupStyle。以下是一个例子:

      <ControlTemplate TargetType="{x:Type GroupItem}"
                       x:Key="defaultGroup">
           <ItemsPresenter />
      </ControlTemplate>
    
      <ListView.GroupStyle>
       <GroupStyle >                            
        <GroupStyle.ContainerStyle>
         <Style TargetType="{x:Type GroupItem}">
          <Setter Property="Margin"
            Value="0,0,0,5" />
          <Setter Property="Template">
           <Setter.Value>
            <ControlTemplate TargetType="{x:Type GroupItem}">
             <Expander IsExpanded="False"
                 BorderBrush="Black"
                 BorderThickness="3"
                 Padding="5,1,1,5">
              <Expander.Header>
               <DockPanel>
                <TextBlock FontWeight="Bold"
                     Margin="0"
                     Width="250">
                 <TextBlock.Text>
                  <MultiBinding StringFormat="{}{0} ({1} jobs)">
                   <Binding Path="Name" />
                   <Binding Path="ItemCount" />
                  </MultiBinding>
                 </TextBlock.Text>
                </TextBlock>
                <TextBlock FontWeight="Bold"
                     Text="{Binding Path=Items[0].Category, StringFormat=T}" />
               </DockPanel>
              </Expander.Header>
              <Expander.Content>
               <ItemsPresenter />
              </Expander.Content>
             </Expander>
            </ControlTemplate>
           </Setter.Value>
          </Setter>
          <Style.Triggers>
           <DataTrigger Binding="{Binding Items[0].Category}"
               Value="ABC">
            <Setter Property="Template"
              Value="{StaticResource defaultGroup}" />
           </DataTrigger>
          </Style.Triggers>
         </Style>
        </GroupStyle.ContainerStyle>
       </GroupStyle>
      </ListView.GroupStyle>