Я использую WPF TreeView для отображения некоторой иерархической информации. Каждый элемент в TreeView состоит из нескольких атрибутов, поэтому я использую Grid внутри моего HierarchicalDataTemplate для отображения этих атрибутов:
<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 здесь , но это требует от меня реализации пользовательского интерфейса (ITreeModel) для моей модели. Также подход в этом решении состоит в том, чтобы начать с ListView и реализовать RowExpander вручную. В моем случае TreeView достаточно близко к тому, что мне нужно, поэтому я надеюсь, что наложение заголовка на него должно быть очень простым.
2) TreeListView здесь . Этот действительно начинается с TreeView, но я не могу понять, как настроить заголовок. Я подозреваю, что мне нужно настроить GridViewHeaderRowPresenter в generic.xaml, но у этого элемента, похоже, нет собственного ControlTemplate.