WPF TreeView的列标题

10

我正在使用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>
这将显示为一个带有4列的漂亮树形视图 - 到此为止一切都很好!我唯一需要的是在树形视图上方添加一个标题,该标题显示列名。标题列宽应与TreeViewItems同步,并且标题样式应可自定义。最简单的方法是什么?
P.S. 我找到了两个接近解决方案:
1)这里的TreeListView需要我向我的模型实现自定义接口(ITreeModel)。此外,在此解决方案中的方法是从ListView开始并手动实现RowExpander。对于我的情况,TreeView已经足够接近我所需的,因此我希望将标题放在上面应该非常简单。
2)这里的TreeListView确实从TreeView开始,但我无法弄清楚如何自定义标题。我怀疑我必须自定义generic.xaml中的GridViewHeaderRowPresenter,但是这个元素似乎没有自己的ControlTemplate。
1个回答

0
您可以尝试重用您的SharedSizeGroup定义。例如,将另一个网格放置在TreeView上方作为标题,并将它们放置在StackPanel中,如下所示:
        <StackPanel Grid.IsSharedSizeScope="True" Orientation="Vertical">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition SharedSizeGroup="NameColumn" />
                    <ColumnDefinition SharedSizeGroup="GenreColumn" />
                    <ColumnDefinition SharedSizeGroup="BornColumn" />
                    <ColumnDefinition SharedSizeGroup="DiedColumn" />
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="0" Text="Name"/>
                <TextBlock Grid.Column="1" Text="Genre"/>
                <TextBlock Grid.Column="2" Text="Born"/>
                <TextBlock Grid.Column="3" Text="Dies"/>
            </Grid>
            <TreeView>
               ...
            </TreeView>
        </StackPanel>

Grid.IsSharedSizeScope=True 会重用你的 SharedSizeGroups 用于标题和树。

你也可以单独为标题设置样式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接