0

假设我在 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 可以为每个列表指定一个不同的。说得通?

4

1 回答 1

0

我不是 100% 确定您想要实现什么,但听起来您正在寻找的是 DataTemplateSelector?

http://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector.aspx

于 2012-10-19T06:56:19.327 回答