2010-05-16 33 views
8

我正在使用WPF TreeView顯示一些分層信息。在TreeView每個項目包含多個屬性,所以我用我的HierarchicalDataTemplate內的網格顯示這些屬性: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> 

這顯示爲一個不錯的TreeView有4列 - 越遠越好!我需要的唯一附加功能是TreeView上方顯示列名稱的標題。標題列的寬度應該與TreeViewItems同步,並且標題樣式應該可以自定義。最簡單的方法是什麼?

P.S.我發現兩個解決方案已經接近:

1)TreeListView here,但這需要我爲我的模型實現自定義接口(ITreeModel)。此解決方案的方法是以ListView開始並手動實施RowExpander。在我的情況下,TreeView足夠接近我所需要的,所以我希望把標題放在它上面應該很簡單。

2)TreeListView here。這一個確實以TreeView開頭,但我無法弄清楚如何自定義標題。我懷疑我必須自定義generic.xaml中的GridViewHeaderRowPresenter,但是這個元素似乎沒有自己的ControlTemplate。

回答

4

那麼,我發現一個解決方案here,完全符合我的要求!