C# 树视图的父节点之间的空间
我有一个C# 树视图的父节点之间的空间,c#,wpf,xaml,layout,treeview,C#,Wpf,Xaml,Layout,Treeview,我有一个TreeView,其中父节点和子节点绑定到相同的对象类型。我想做的是有额外的空间,或者创建一些其他的方法来分离顶级节点 例如,如果正常情况下是这样: A B C F D E 我希望它看起来像这样: A B C F (space here) D E 下面是我的代码-为了将TreeView用作组合框,已经有很多样式 使用demo2:并为顶级层次结构数据模板在StackPanel中添加上边距 例如: 使用demo2:并为顶级层次结构数据模板在StackPanel中添
TreeView
,其中父节点和子节点绑定到相同的对象类型。我想做的是有额外的空间,或者创建一些其他的方法来分离顶级节点
例如,如果正常情况下是这样:
A
B
C
F
D
E
我希望它看起来像这样:
A
B
C
F
(space here)
D
E
下面是我的代码-为了将TreeView用作组合框,已经有很多样式
使用demo2:并为顶级层次结构数据模板在StackPanel中添加上边距
例如:
使用demo2:并为顶级层次结构数据模板在StackPanel中添加上边距
例如:
试试这个
<TreeView>
<TreeViewItem Header="Employee1">
<TreeViewItem Header="Jesper"/>
<TreeViewItem Header="Aaberg"/>
<TreeViewItem Header="12345"/>
</TreeViewItem>
**<Separator />**
<TreeViewItem Header="Employee2">
<TreeViewItem Header="Dominik"/>
<TreeViewItem Header="Paiha"/>
<TreeViewItem Header="98765"/>
</TreeViewItem>
</TreeView>
****
或者你可以为带有分隔符的项目创建一个DataTemplate
<TreeView>
<TreeViewItem Header="Employee1">
<TreeViewItem Header="Jesper"/>
<TreeViewItem Header="Aaberg"/>
<TreeViewItem Header="12345"/>
</TreeViewItem>
**<Separator />**
<TreeViewItem Header="Employee2">
<TreeViewItem Header="Dominik"/>
<TreeViewItem Header="Paiha"/>
<TreeViewItem Header="98765"/>
</TreeViewItem>
</TreeView>
****
或者你可以为项目制作一个数据模板,模板内有分隔符好的,让我们挖掘一些老问题:) 对于顶层和嵌套层,只需使用不同的
ItemContainerStyle
。TreeView.ItemContainerStyle
将以顶级项为目标,而hierarchycalDataTemplate.ItemContainerStyle
将以嵌套项为目标
<Style x:Key="TreeViewItemStyle" TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="True" />
</Style>
<!-- Special style for the top level with top/bottom margin of 5 -->
<Style x:Key="TopTreeViewItemStyle" TargetType="TreeViewItem" BasedOn="{StaticResource TreeViewItemStyle}">
<Setter Property="Margin" Value="0 5" />
</Style>
...
<TreeView
x:Name="GroupsCB"
Style="{StaticResource TreeViewBoxStyle}"
ItemsSource="{Binding Mode=OneTime}"
ItemContainerStyle="{StaticResource TopTreeViewItemStyle}"
...
<HierarchicalDataTemplate
x:Key="GroupTreeItemTemplate"
ItemsSource="{Binding Children, Mode=OneTime}"
ItemContainerStyle="{StaticResource TreeViewItemStyle}"
...
好吧,让我们挖掘一些老问题:)
对于顶层和嵌套层,只需使用不同的ItemContainerStyle
。TreeView.ItemContainerStyle
将以顶级项为目标,而hierarchycalDataTemplate.ItemContainerStyle
将以嵌套项为目标
<Style x:Key="TreeViewItemStyle" TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="True" />
</Style>
<!-- Special style for the top level with top/bottom margin of 5 -->
<Style x:Key="TopTreeViewItemStyle" TargetType="TreeViewItem" BasedOn="{StaticResource TreeViewItemStyle}">
<Setter Property="Margin" Value="0 5" />
</Style>
...
<TreeView
x:Name="GroupsCB"
Style="{StaticResource TreeViewBoxStyle}"
ItemsSource="{Binding Mode=OneTime}"
ItemContainerStyle="{StaticResource TopTreeViewItemStyle}"
...
<HierarchicalDataTemplate
x:Key="GroupTreeItemTemplate"
ItemsSource="{Binding Children, Mode=OneTime}"
ItemContainerStyle="{StaticResource TreeViewItemStyle}"
...
他没有使用treevieItem
s,而是绑定,所以我认为这没有帮助。他没有使用treevieItem
s,而是绑定,所以我认为这没有帮助。他说所有对象都是同一类型的,所以这没有帮助。@svick,这就是这样做的方法。为什么你认为OP的对象类型是固定的,不可能改变?阅读他的问题的第一句。我不认为因为边距而改变类的层次结构是明智的。他说所有的对象都是同一类型的,所以这没有帮助。@svick,这就是这样做的方法。为什么你认为OP的对象类型是固定的,不可能改变?阅读他的问题的第一句。我不认为因为利润而改变你的等级结构是明智的。我已经好几年没有接触过WPF了,所以我无法验证这是正确的答案。不用担心。。。如果有人在寻找类似的东西,他可能会偶然发现答案并尝试:)我已经多年没有接触过WPF了,所以我无法验证这是正确的答案。不用担心。。。如果有人在寻找类似的东西,他可能会偶然发现答案并尝试:)