在 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>
有没有办法在 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>