WPF TreeView 的列标题
Posted
技术标签:
【中文标题】WPF TreeView 的列标题【英文标题】:Column Header for a WPF TreeView 【发布时间】:2011-02-20 02:41:00 【问题描述】:我正在使用 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 列的漂亮 TreeView - 到目前为止一切都很好!我需要的唯一额外的东西是 TreeView 上方显示列名的标题。标题列的宽度应该与 TreeViewItems 同步,标题样式也应该是可定制的。最简单的方法是什么?
附:我找到了两个接近的解决方案:
1) TreeListView here,但这需要我为我的模型实现自定义接口 (ITreeModel)。此外,此解决方案中的方法是从 ListView 开始并手动实现 RowExpander。在我的情况下,TreeView 足够接近我需要的,所以我希望在它上面放置一个标题应该非常简单。
2) 一个 TreeListView here。这确实是从 TreeView 开始的,但我不知道如何自定义标题。我怀疑我必须在generic.xaml中自定义GridViewHeaderRowPresenter,但是这个元素似乎没有自己的ControlTemplate。
【问题讨论】:
【参考方案1】:您可以尝试重用您的 SharedSizeGroup 定义。 例如,在 TreeView 上方放置另一个网格作为标题,并将它们放在堆栈面板中,例如:
<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 作为标题和树。
您还可以单独设置标题的样式。
【讨论】:
以上是关于WPF TreeView 的列标题的主要内容,如果未能解决你的问题,请参考以下文章