我正在使用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。