WPF TreeView如何使用层级模板HierarchicalDataTemplate为每层应用不同的Style

项目场景:

需要一个TreeViewItem里面有三层,每层的样式都不同,,因此需要给三层使用不同的模板。
使用TreeViewItem的原因是为了使用HierarchicalDataTemplate绑定多层数据。数据来源是一个Node对象的列表

public class Node : INotifyPropertyChanged
    {
        public Node(string szFatherNodeName = "")
        {
            Nodes = new List<Node>();
        }
        public string NodeName { get; set; }
        private bool? isSelected = false;
        public bool? IsSelected
        {
            get { return this.isSelected; }
            set
            {
                this.isSelected = value;
                this.OnPropertyChanged();
            }
        }
        public List<Node> Nodes { get; set; }
     }
<TreeViewItem Style="{StaticResource TreeViewItemStyle_Root}" ItemsSource="{Binding NodeList}" ItemContainerStyle="{StaticResource TreeViewItemStyle_Secondery}" >
	<TreeViewItem.Header>
		<TextBlock Text="RootHeaderText"/>
	</TreeViewItem.Header>
	<TreeViewItem.ItemTemplate>
	    <HierarchicalDataTemplate DataType="{x:Type local:Node}" ItemsSource="{Binding Path=Nodes}" ItemContainerStyle="{StaticResource TreeViewItemStyle_Leaf}" >
        	<CheckBox Content="{Binding Path=NodeName}" IsChecked="{Binding IsSelected, Mode=TwoWay}"/>				
        	<HierarchicalDataTemplate.ItemTemplate>
            	<DataTemplate>
	                <CheckBox Content="{Binding Path=NodeName}" IsChecked="{Binding IsSelected, Mode=TwoWay}"/>
                </DataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>
         </HierarchicalDataTemplate>
     </TreeViewItem.ItemTemplate>
</TreeViewItem>

第一层使用的样式是TreeViewItemStyle_Root直接写在Style里,第二层的样式TreeViewItemStyle_Secondery写在第一层的ItemContainerStyle里,第三层的样式TreeViewItemStyle_Leaf写在第二层的内容层级模板HierarchicalDataTemplateItemContainerStyle里。
注意,这里的Style都是Header的样式,层级模板也是给每一层的Header指定内容。

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值