WPF TreeView控件 使用总结

TreeView使用总结


绑定:

XAML

 <Grid>

  <Grid.Resources>
                <HierarchicalDataTemplate DataType="{x:Type src:LeafNode}"
ItemsSource="{Binding Path=Children}">
                        <TextBlock Text="{Binding Path=Data}" ToolTip="{Binding Path=Data}"></TextBlock>
                </HierarchicalDataTemplate>
            </Grid.Resources>
            <TreeView x:Name="twLeaf" TreeViewItem.Selected="twLeaf_Selected">
                <TreeView.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="delete" Click="MenuItem_Click_1"></MenuItem>
                    </ContextMenu>
                </TreeView.ContextMenu>
</TreeView>
 </Grid>

CS代码:


 public class LeafNode
    {
        private string data;


        public string Data
        {
            get { return data; }
            set { data = value; }
        }


        private List<LeafNode> children;


        public List<LeafNode> Children
        {
            get { return children; }
            set { children = value; }
        }
    }


绑定CS代码:
 for (int i = 0; i < 5; i++)
            {
                LeafNode child = new LeafNode() { Data = "root" + i.ToString() };
                child.Children = new List<LeafNode>();
                roots.Add(child);
                10 children
                for (int j = 0; j < 10; j++)
                {
                    LeafNode subChild = new LeafNode() { Data = "son" + j.ToString() };
                    subChild.Children = new List<LeafNode>();
                    15 children
                    child.Children.Add(subChild);
                    for (int k = 0; k < 15; k++)
                    {
                        LeafNode gs = new LeafNode() { Data = "grantSon" + k.ToString() };
                        subChild.Children.Add(gs);
                    }
                }
            }
 twLeaf.ItemsSource = roots;


===============================================
点击叶子节点时,希望展开子节点:


            <TreeView x:Name="twLeaf" TreeViewItem.Selected="twLeaf_Selected">


  private void twLeaf_Selected(object sender, RoutedEventArgs e)
        {
             TreeViewItem item = e.OriginalSource as TreeViewItem;
            item.IsExpanded = true;
        }




=================================================


动态添加子节点




  init 5 root nodes
        List<LeafNode> roots = new List<LeafNode>();
        private void InitTree()
        {
            for (int i = 0; i < 5; i++)
            {
                LeafNode child = new LeafNode() { Data = "root" + i.ToString() };
                child.Children = new List<LeafNode>();
                roots.Add(child);
                10 children
                for (int j = 0; j < 10; j++)
                {
                    LeafNode subChild = new LeafNode() { Data = "son" + j.ToString() };
                    subChild.Children = new List<LeafNode>();
                    15 children
                    child.Children.Add(subChild);
                    for (int k = 0; k < 15; k++)
                    {
                        LeafNode gs = new LeafNode() { Data = "grantSon" + k.ToString() };
                        subChild.Children.Add(gs);
                    }
                }
            }
            


            for (int i = 0; i < roots.Count; i++)
            {
                TreeViewItem item = new TreeViewItem();
                AddLeaf(item, roots[i]);
                twLeaf.Items.Add(item);
            }


        }


        private void AddLeaf(TreeViewItem twItem, LeafNode node)
        {
            if (node == null)
            {
                return;
            }
            twItem.Header = node.Data;


            if (node.Children != null && node.Children.Count > 0)
            {
                for (int i = 0; i < node.Children.Count; i++)
                {
                    TreeViewItem it = new TreeViewItem();
                    AddLeaf(it, node.Children[i]);
                    twItem.Items.Add(it);
                }
            }
        }


移除选中节点:


    private void MenuItem_Click_1(object sender, RoutedEventArgs e)
        {
            TreeViewItem item = twLeaf.SelectedItem as TreeViewItem;
            if (item != null)
            {
                TreeViewItem pi = item.Parent as TreeViewItem;
                if (pi != null)
                {
                    pi.Items.Remove(item);
                }
                else {
                    twLeaf.Items.Remove(item);
                }
            }
        }


==================================================


遍历Treeview


 List<LeafNode> nodeList = new List<LeafNode>();
        private void btnGetNodes_Click(object sender, RoutedEventArgs e)
        {
            nodeList.Clear();
            for (int i = 0; i < twLeaf.Items.Count; i++)
            {
                TreeViewItem rootItem = twLeaf.Items[i] as TreeViewItem;
                if (null != rootItem)
                {
                    GetTreeviewNodes(null, rootItem);
                }
            }
        }




        private void GetTreeviewNodes(LeafNode parentNode, TreeViewItem twItem)
        {
            LeafNode node = new LeafNode()
            {
                Data = twItem.Header.ToString(),
                Children = new List<LeafNode>()
            };
            if (parentNode != null)
            {
                parentNode.Children.Add(node);
            }
            else
            {
                nodeList.Add(node);
            }
            if (twItem.Items.Count > 0)
            {
                for (int i = 0; i < twItem.Items.Count; i++)
                {
                    TreeViewItem item = twItem.Items[i] as TreeViewItem;
                    if (null != item)
                    {
                        GetTreeviewNodes(node, item);
                    }
                }
            }
            else
            {
                return;
            }
        }
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值