假设我在 WPF 的列表框中进行了一些分组
<ListBox Name="bob" xmlns:swd="clr-namespace:System.Windows.Data;assembly=PresentationFramework">
<ListBox.Resources>
<CollectionViewSource x:Key="view">
<CollectionViewSource.GroupDescriptions>
<swd:PropertyGroupDescription PropertyName="Group"></swd:PropertyGroupDescription>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</ListBox.Resources>
<ListBox.ItemsSource>
<Binding Source="{StaticResource view}"></Binding>
</ListBox.ItemsSource>
<ListBox.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Border Background="Red" TextElement.Foreground="White">
<ContentPresenter Content="{Binding Path=Name}">
<ContentPresenter.ContentTemplate>
<DataTemplate>
<TextBlock><Run Text="("></Run><Run Text="{Binding Mode=OneWay}"></Run><Run Text=")"></Run></TextBlock>
</DataTemplate>
</ContentPresenter.ContentTemplate>
</ContentPresenter>
</Border>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListBox.GroupStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Item}"></TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
并在代码中填充了视图,如下所示:
var view = bob.FindResource("view") as CollectionViewSource;
view.Source = "Mary,Mark,Jane,Joey,Justin"
.Split(',')
.GroupBy(i => i[0])
.SelectMany(g => g.Select(i => new { Group = g.Key, Item = i }))
.ToArray();
这一切都很好,除了组标题的外观,红色背景的边框,需要为我进行分组的每个列表框定义。如果我想要绿色,我需要在任何地方进行更改。我可以取出颜色并将其作为资源或将其放入样式中,但是如果我想添加图标或其他项目怎么办。
我真正想做的是取出 HeaderTemplate 并在某个地方定义一次。但是里面的 ContentPresenter.ContentTemplate 可以为每个列表指定一个不同的。说得通?