さまざまなカテゴリアイテムのListViewでGroupStyleを変更(有効化/無効化)

StackOverflow https://stackoverflow.com/questions/222729

  •  03-07-2019
  •  | 
  •  

質問

実行時の条件に基づいて、 ListView GroupStyles を切り替えるにはどうすればよいですか?たとえば、 GroupStyle ヘッダー名がnullのアイテムにはDefaultを使用する必要があり、nullでない場合はカスタムの GroupStyle テーマを使用しますか? GroupStyleSelector を試しましたが、機能しません。マルチレベルのグループ化で機能し、私の場合は1つのレベルのグループ化しかありません。

「はい」の場合、その方法は?

カスタム GroupStyle

    <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>

どうもありがとう。

誠に、 ヴラッド。

役に立ちましたか?

解決

さて、

解決策を見つけました。基本的に、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>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top