在 ListView 之间共享 GroupStyle

Share GroupStyle between ListViews

有没有办法在 ListView 之间共享 GroupStyle/Columns 的代码。

我有适用于一个 ListView 的设置,但由于我想为另外两个使用相同的样式,我不想复制代码,从而使文件混乱。加上其中一个 ListView 的一项更改,可能会忘记复制到另一个。

我知道我可以在 Window.Resources 中使用样式,我让它适用于列,但我无法使用分组。

我从 ObservableCollection > ListCollectionView > ItemsSource 加载了项目,并在 PowerShell 中进行了绑定,效果非常好。

Xaml 适用于一个 ListView:

<ListView Grid.Row="1" Name="lvAllFiles">
    <ListView.View>
        <GridView>
            <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" Width="1000"/>
            <GridViewColumn DisplayMemberBinding="{Binding Created}" Header="Created" Width="100"/>
            <GridViewColumn DisplayMemberBinding="{Binding LastWriteTime}" Header="LastWriteTime" Width="100"/>
        </GridView>
    </ListView.View>
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="ToolTip" Value="{Binding TT}"/>
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.GroupStyle>
        <GroupStyle>
            <GroupStyle.ContainerStyle>
                <Style TargetType="{x:Type GroupItem}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate>
                                <Border BorderBrush="Gray" BorderThickness="1">
                                    <Expander IsExpanded="True">
                                        <Expander.Header>
                                            <TextBlock Text="{Binding Name}" Foreground="Gray" FontSize="14"/>
                                        </Expander.Header>
                                        <ItemsPresenter/>
                                    </Expander>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </GroupStyle.ContainerStyle>
        </GroupStyle>
    </ListView.GroupStyle>
</ListView>

GroupStyle 定义为具有 x:Key 的资源,例如 <Window.Resources>:

<Window.Resources>
    <GroupStyle x:Key="gs">
        <GroupStyle.ContainerStyle>
            <Style TargetType="{x:Type GroupItem}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate>
                            <Border BorderBrush="Gray" BorderThickness="1">
                                <Expander IsExpanded="True">
                                    <Expander.Header>
                                        <TextBlock Text="{Binding Name}" Foreground="Gray" FontSize="14"/>
                                    </Expander.Header>
                                    <ItemsPresenter/>
                                </Expander>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </GroupStyle.ContainerStyle>
    </GroupStyle>
</Window.Resources>

然后您可以像这样引用它:

<ListView Grid.Row="1" Name="lvAllFiles">
    ...
    <ListView.GroupStyle>
        <StaticResource ResourceKey="gs" />
    </ListView.GroupStyle>
</ListView>