silverlight treeview 中添加复选框实现实现选择父节点,其下的子节点全部选中:

来源:互联网 发布:二手书知乎 编辑:程序博客网 时间:2024/04/30 11:49
TreeViewItem t = null;
            for (int i = 0; i < list.Count; i++)
            {
                if (Convert.ToInt32(list[i].AreaPId) == 0)
                {
                    StackPanel sp = new StackPanel();
                    t = new TreeViewItem
                    {
                        //Header = list[i].AreaName,
                        Header = sp,
                        Tag = list[i].AreaId,
                        IsExpanded = true,
                    };
                    CheckBox cb = new CheckBox()
                    {
                        Content = list[i].AreaName,
                        Tag = t,
                    };
                    sp.Children.Add(cb);
                    treeview1.Items.Add(t);
                    //LoadTree(treeview1.Items, 0);
                    CreaChildNode(t, list);
                }
            }

 public void CreaChildNode(TreeViewItem item, ObservableCollection<Modele> list)
        {

            ObservableCollection<Modele> data = new ObservableCollection<Modele>();
            for (int i = 0; i < list.Count; i++)
            {
                if (Convert.ToInt32(list[i].AreaPId) == (int)item.Tag)
                {
                    data.Add(list[i]);
                }
            }
            for (int j = 0; j < data.Count; j++)
            {
                StackPanel sp = new StackPanel();
                TreeViewItem t = new TreeViewItem()
                {
                    //Header = data[j].AreaName,
                    Header = sp,
                    Tag = data[j].AreaId,
                    IsExpanded = true,
                };
                CheckBox cb = new CheckBox()
                {
                    Content = data[j].AreaName,
                    Tag = t,
                };
                sp.Children.Add(cb);
                item.Items.Add(t);
                CreaChildNode(t, list);
            }
        }


        //遍历树控件取到所有的控件
        private static IEnumerable<DependencyObject> GetChilds(DependencyObject root)
        {
            List<DependencyObject> lst = new List<DependencyObject>();
            lst.Add(root);
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(root); i++)
            {
                lst.AddRange(GetChilds(VisualTreeHelper.GetChild(root, i)));
            }
            return lst;
        }

 

         /// <summary>
        /// 选中事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void treeview1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            TreeView tree = sender as TreeView;
            TreeViewItem t = tree.SelectedItem as TreeViewItem;
            //递归得到下一层
            //CreaChildNodeOne(t, list);

            //alljie.Clear();
            //递归得到  所有父级
            //AllItem(t, list);

            StackPanel sp = t.Header as StackPanel;
            CheckBox cb = null;
            for (int i = 0; i < sp.Children.Count; i++)
            {
                cb = sp.Children[0] as CheckBox;
            }

            cb.Checked += new RoutedEventHandler((sender1, e1) =>
            {
                var obj = GetChilds(t).OfType<CheckBox>();
                foreach (CheckBox d in obj)
                {
                    d.IsChecked = true;
                }
            });
            cb.Unchecked += new RoutedEventHandler((sender1, e1) =>
            {
                var obj = GetChilds(t).OfType<CheckBox>();
                foreach (CheckBox d in obj)
                {
                    d.IsChecked = false;
                }
            });
        }

0 0
原创粉丝点击