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;
}
});
}