2010-05-16 115 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,完全符合我的要求!