2010-05-16 8 views
8

Sto usando il TreeView WPF per visualizzare alcune informazioni gerarchiche. Ogni elemento della TreeView si compone di diversi attributi, quindi sto utilizzando una griglia nel mio HierarchicalDataTemplate per visualizzare questi attributi:Intestazione colonna per 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> 

Questo viene visualizzato come un bel TreeView con 4 colonne - finora tutto bene! L'unica cosa aggiuntiva di cui ho bisogno è un'intestazione sopra TreeView che visualizza i nomi delle colonne. Le larghezze della colonna di intestazione dovrebbero essere sincronizzate con TreeViewItems e anche gli stili di intestazione dovrebbero essere personalizzabili. Qual è il modo più semplice per farlo?

P.S. Ho trovato due soluzioni che si avvicinavano:

1) Un TreeListView here, ma questo mi impone di implementare un'interfaccia personalizzata (ITreeModel) per il mio modello. Anche l'approccio in questa soluzione è iniziare con un ListView e implementare manualmente un RowExpander. Nel mio caso, TreeView è sufficientemente vicino a quello di cui ho bisogno, quindi spero che inserire un'intestazione su di esso sia molto semplice.

2) Un TreeListView here. Questo in effetti inizia con un TreeView, ma non riesco a capire come personalizzare l'intestazione. Ho il sospetto che devo personalizzare GridViewHeaderRowPresenter nel generic.xaml, ma questo elemento non sembra avere il proprio ControlTemplate.

risposta

4

Bene, ho trovato una soluzione here che si adatta perfettamente alle mie esigenze!