2010-05-16 14 views
8

Estoy utilizando el WPF TreeView para mostrar información jerárquica. Cada elemento de la TreeView se compone de varios atributos, así que estoy usando una rejilla dentro de mi HierarchicalDataTemplate para mostrar estos atributos:Encabezado de columna para un WPF TreeView

<HierarchicalDataTemplate x:Key="ArtistTemplate" 
    ItemsSource="{Binding XPath=Title}" 
    ItemTemplate="{StaticResource TitleTemplate}"> 

    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition SharedSizeGroup="NameColumn" /> 
      <ColumnDefinition SharedSizeGroup="GenreColumn" /> 
      <ColumnDefinition SharedSizeGroup="BornColumn" /> 
      <ColumnDefinition SharedSizeGroup="DiedColumn" /> 
     </Grid.ColumnDefinitions> 

     <TextBlock Grid.Column="0" Text="{Binding [email protected]}" /> 
     <TextBlock Grid.Column="1" Text="{Binding [email protected]}" /> 
     <TextBlock Grid.Column="2" Text="{Binding [email protected]}" /> 
     <TextBlock Grid.Column="3" Text="{Binding [email protected]}" /> 
    </Grid> 

</HierarchicalDataTemplate> 

unidades se presentan como un buen TreeView con 4 columnas - hasta ahora tan bueno! Lo único adicional que necesito es un encabezado sobre TreeView que muestre los nombres de las columnas. El ancho de la columna del encabezado debe estar sincronizado con TreeViewItems y también los estilos de encabezado deben ser personalizables. ¿Cuál es la forma más fácil de hacer esto?

P.S. Encontré dos soluciones que se acercaron:

1) Una TreeListView here, pero esto requiere que implemente una interfaz personalizada (ITreeModel) para mi modelo. También el enfoque en esta solución es comenzar con un ListView e implementar RowExpander manualmente. En mi caso, TreeView está lo suficientemente cerca de lo que necesito, así que espero que ponerle un encabezado sea muy simple.

2) Un TreeListView here. Este realmente comienza con TreeView, pero no puedo encontrar la forma de personalizar el encabezado. Sospecho que tengo que personalizar GridViewHeaderRowPresenter en generic.xaml, pero este elemento no parece tener su propia ControlTemplate.

Respuesta

4

¡Bien, encontré una solución here que se ajusta perfectamente a mis requisitos!