我正在使用WPF TreeView来显示一些分层信息。 TreeView中的每个项目都包含多个属性,因此我在HierarchicalDataTemplate中使用Grid来显示这些属性:
<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 XPath=@Name}" />
<TextBlock Grid.Column="1" Text="{Binding XPath=@Genre}" />
<TextBlock Grid.Column="2" Text="{Binding XPath=@Born}" />
<TextBlock Grid.Column="3" Text="{Binding XPath=@Died}" />
</Grid>
</HierarchicalDataTemplate>
这显示为一个漂亮的TreeView,有4列 - 到目前为止一切都很好!我需要的唯一额外的东西是TreeView上方的标题,显示列名称。标题列宽度应与TreeViewItems同步,标题样式也应该是可自定义的。最简单的方法是什么?
P.S。我找到了两个接近的解决方案:
1)TreeListView here,但这需要我为我的模型实现自定义接口(ITreeModel)。此解决方案中的方法是从ListView开始并手动实现RowExpander。在我的例子中,TreeView足够接近我的需要,所以我希望在它上面放一个标题应该非常简单。
2)TreeListView here。这个确实以TreeView开头,但我无法弄清楚如何自定义标头。我怀疑我必须在generic.xaml中自定义GridViewHeaderRowPresenter,但是这个元素似乎没有自己的ControlTemplate。