如果指定了两者,ContainerStyle
似乎优先使用HeaderTemplate
,如下所示;
<controls:DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=Name}" Background="Yellow" />
</StackPanel>
</DataTemplate>
</GroupStyle.HeaderTemplate>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander IsExpanded="true" Background="Violet">
<Expander.Header>
<DockPanel TextBlock.FontWeight="Bold">
<TextBlock Text="{Binding Path=Name}" />
<TextBlock Text="{Binding Path=ItemCount}"/>
</DockPanel>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</controls:DataGrid.GroupStyle>
唯一的区别是HeaderTemplate
无法访问ItemsPresenter
,或者与分层数据结构有什么不同?
谢谢!
已修改为http://wpftutorial.net/DataGrid.html#grouping的链接。我实际上并没有直接从那里拿到这个例子,但它是一个很棒的网站,所以无论如何他们都可以有一个链接。
答案 0 :(得分:8)
GroupStyle.HeaderTemplate
属性可让您设置DataTemplate
来定义DataGrid
中的群组标题。这是标题通常出现在每个组顶部的部分。
来自MSDN:
获取或设置用于显示组头的模板。
GroupStyle.ContainerStyle
属性允许您添加Style
,用于定义每个组项的容器的外观。可以把它想象成每个组项目所在的“框”。在这种情况下,框中的数据看起来像是由DataTemplate
设置为DataGrid.ItemsTemplate
。
来自MSDN:
使应用程序编写者能够为要应用于每个生成的
GroupItem
的样式提供自定义选择逻辑。
更新&gt;&gt;&gt;
回应你的评论......你应该看到两者。我猜你的代码来自WPF Tutorials.NET上的WPF DataGrid Control文章(除非你想侵犯他们的版权,否则你真的应该链接到这些文章),这就是你的问题。 ..他们不正确实施了ContainerStyle
。
为了更准确,他们没有正确实施ControlTemplate
中的ContainerStyle
。定义ControlTemplate
时,通常会在内部添加ContentPresenter
来“呈现内容”,在这种情况下来自DataTemplate
中的HeaderTemplate
。如果添加一个,将看到两个模板正常工作:
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander IsExpanded="true" Background="Violet">
<Expander.Header>
<DockPanel TextBlock.FontWeight="Bold">
<ContentPresenter />
</DockPanel>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
尽量记住这一点:
绑定到
DataTemplate
中的数据类型属性...名称中有线索。再次定义
Control
中ControlTemplate
的内容...... clue ...... name。