wpf xaml datagrid .net-3.5 groupstyle

¿Cuál es la diferencia entre HeaderTemplate y ContainerStyle en WPF DataGrid''s GroupStyle?



xaml .net-3.5 (1)

Parecería que el estilo del ContainerStyle se usa con preferencia a HeaderTemplate cuando se especifican ambos, como se muestra a continuación;

<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>

¿La única diferencia es que HeaderTemplate no tiene acceso al ItemsPresenter , o la diferencia tiene que ver con las estructuras jerárquicas de datos?

¡Gracias!

Editado para vincular a http://wpftutorial.net/DataGrid.html#grouping . En realidad, no tomé el ejemplo directamente desde allí, pero es un gran sitio para que puedan tener un enlace de todos modos.


La propiedad GroupStyle.HeaderTemplate permite configurar una DataTemplate para definir cómo se verán los encabezados de grupo en DataGrid . Esta es la parte donde el título generalmente aparece en la parte superior de cada grupo.

Desde MSDN :

Obtiene o establece la plantilla que se utiliza para mostrar el encabezado del grupo.

La propiedad GroupStyle.ContainerStyle permite agregar un Style que define cómo se verá el contenedor de cada elemento de grupo. Piense en esto como la ''caja'' en la que se colocarán los elementos de cada grupo. En este caso, cómo se verán los datos dentro del cuadro está definido por un conjunto de DataTemplate como DataGrid.ItemsTemplate .

Desde MSDN :

Permite que el escritor de la aplicación proporcione una lógica de selección personalizada para que un estilo se aplique a cada GroupItem generado.

ACTUALIZACIÓN >>>

En respuesta a tu comentario ... deberías ver ambos. Supongo que su código proviene del artículo WPF DataGrid Control sobre WPF Tutorials.NET (al que realmente debería haber vinculado a menos que quiera infringir sus derechos de autor) y este es su problema ... no han implementado el ContainerStyle correctamente .

Para ser más precisos, no han implementado el ControlTemplate en el ContainerStyle correctamente. Cuando define un ControlTemplate , generalmente se acostumbra agregar un ContentPresenter dentro para ''presentar el contenido'', que en este caso proviene de DataTemplate en HeaderTemplate . Si agrega uno, verá las dos plantillas funcionando:

<ControlTemplate TargetType="{x:Type GroupItem}"> <Expander IsExpanded="true" Background="Violet"> <Expander.Header> <DockPanel TextBlock.FontWeight="Bold"> <ContentPresenter /> </DockPanel> </Expander.Header> <ItemsPresenter /> </Expander> </ControlTemplate>

Trata de recordar esto:

Enlace a sus propiedades de tipo de datos en DataTemplate s ... la pista está en el nombre.

Defina cómo se ve el Control en ControlTemplate s ... otra vez, pista ... nombre.