WPF TreeView控件 使用总结

原创 2012年03月09日 14:22:30
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;
            }
        }
版权声明:本文为博主原创文章,未经博主允许不得转载。

WPF中TreeView的使用

WPF中对树控件的使用主要有两种方法, 方法一,对TreeView进行静态搭建,对应的XAML文件代码如下: ...
  • lzhui1987
  • lzhui1987
  • 2016年05月11日 23:08
  • 7327

WPF之TreeView操作实战

1、绑定层级数据源 绘制名称为TreeView_NodeList的TreeView控件,使用HierarchicalDataTemplate类将具有层级结构的数据源绑定至TreeView控件。 ...
  • tiana0
  • tiana0
  • 2017年01月06日 13:13
  • 2924

WPF TreeView的TreeViewItem查找

Oracle连接字符串总结   CentOS 安装JDK WPF TreeView的TreeViewItem查找   2013-12-17 13:31:06|  分类: C# |...
  • yulongguiziyao
  • yulongguiziyao
  • 2014年09月23日 16:18
  • 2662

WPF中TreeView的使用

不管是在窗体程序开发还是在web应用程序开发中,大家都知道树这个控件,并且都称为TreeView,这个控件将内容分层展示,使其更加形象和直观!同时呢,TreeView在很多项目中都有运用,甚至某些公司...
  • lsc19890723
  • lsc19890723
  • 2011年10月10日 21:09
  • 15616

wpf带checkbox的treeview开发

好久没有写博文了,其实也发现没什么可写的,最近又搞起WPF来,其中用到了treeview,有点东西拿来分享一下。   treeview默认是不带checkbox的,但让他带checkbox也很简单,设...
  • kunoy
  • kunoy
  • 2013年09月12日 15:37
  • 10480

wpf 漂亮Treeview 例子(附源码)

  • 2009年03月07日 19:46
  • 89KB
  • 下载

WPF中的TreeView如何定义模版,并绑定数据

转自:http://www.cnblogs.com/izualx/archive/2011/02/03/1949055.html   最近在用WPF做开发,项目进展的还算顺利,WPF总体来...
  • AAA123524457
  • AAA123524457
  • 2015年06月25日 14:12
  • 2899

wpf TreeView绑定

前台: 后台绑定树(二级菜单) #region 绑定区域 public...
  • qq_31971935
  • qq_31971935
  • 2016年12月27日 10:09
  • 902

WPF Treeview 学习 图标,checkbox,右键菜单

WPF Treeview 学习最近在学习wpf,习惯把自己学习的东西记下来。 刚开始接触的这个控件,有点不知道怎么用。网上看了下,好像大家都觉得不如winform里面的好使。反正,我以前是用mfc做界...
  • Alsmile
  • Alsmile
  • 2011年07月14日 18:09
  • 13419

WPF学习版Win7之TreeView

初衷:为了更好介绍 WPF  应用,所以这个教学版 Windows 7 与原版的不同!希望朋友们喜欢 WPF,喜欢 .NET。 (首次介绍 Blend ,为了清晰故截图较多) 本小节: ...
  • huyu107
  • huyu107
  • 2015年04月09日 10:56
  • 1118
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WPF TreeView控件 使用总结
举报原因:
原因补充:

(最多只允许输入30个字)