我需要在TreeView中为组创建重叠
类似的事情:
在我的ItemsSource节点1中,节点1.1和节点2组合在一起 节点3和节点3.1组合在一起
将CollectionView与PropertyGroupDesciptor一起使用。
现在我不想在每个小组周围添加橙色矩形
到目前为止,我的尝试是使用GroupStyle但是这导致2个Orange GroupItems具有分组属性的值,我需要的是为GroupBox设置样式
任何想法?
我的代码(这部分似乎与我无关,因为它只是我的分组逻辑,但如果对于某些人来说理解我喜欢把它放在这里的内容很重要的话):
CS:
公共类MyNode { public int GroupProperty { 获得;设置; }
public string Title
{
get;set;
}
public List<MyNode> Children
{
get;
set;
}
}
在ViewModel中:
public List<MyNode> MyItemsSource
{
get
{
return new List<MyNode>
{
List<MyNode> nodes = new :ist<MyNode>();
MyNode node1 = new MyNode{ Title = "Node1" ,GroupProperty = 1 }
node1.Children.Add(new MyNode{ Title = "Node 1.1" , GroupProperty = 1});
nodes.Add(node1)
MyNode node2 = new MyNode{ Title = "Node1" ,GroupProperty = 2 }
nodes.Add(node2)
... same goes for Node 3 and Node 3.1
return nodes;
};
}
}
XAML:
资源:
<DataTemplate x:Key="protocolTemplate" DataType="{x:Type local:MyNode}">
<TextBlock Text="{Binding Title}" />
</DataTemplate>
<HierarchicalDataTemplate x:Key="rootTemplate" DataType="{x:Type local:MyNode}"
ItemTemplate="{StaticResource protocolTemplate}" ItemsSource="{Binding SubProtocols}">
<TextBlock Text="{Binding Title}" />
</HierarchicalDataTemplate>
<CollectionViewSource x:Key="protocols" Source="{Binding Protocols}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="GroupProperty" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
查看:
<TreeView ItemTemplate="{StaticResource rootTemplate}" ItemsSource="{Binding Source={StaticResource protocols}}" />
O&#39;我添加了Groups my ItemsSource的代码,如何创建GroupStyle,它会在分组的项目上放置一种叠加?
答案 0 :(得分:0)
我找到了答案,我只需要在GroupStyle中做 在我的GroupItem样式中放置了一个ItemsPresenter,如下所示:
<TreeView.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="GroupItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="GroupItem">
<Grid>
<Rectangle Fill="Orange"/>
<ItemsPresenter />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</TreeView.GroupStyle>