Заголовок столбца для WPF TreeView - PullRequest
9 голосов
/ 16 мая 2010

Я использую 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.

1 Ответ

4 голосов
/ 19 мая 2010

Ну, я нашел решение здесь , которое идеально соответствует моим требованиям!

...