WPF中对树控件的使用主要有两种方法, 方法一,对TreeView进行静态搭建,对应的XAML文件代码如下:
方法二,利用Binding技术动态的搭建树。这种方法比较常见,下面进行详细的介绍:
1.搭建树
首先,在XAML文件中添加TreeView控件:
public class Location
{
public string Name { get; set; }
public List childern { get; set; }
}
在HierarchicalDataTemplate中我们指定他的ItemsSource为Childern,即为Location对象中的Childern,然后将TextBlock对其赋值,并将TextBlock的Text绑定到数据源的Name上。接下来,我们在cs文件中构建List< Location >对象作为树的数据源:
Location loc = new Location()
{
Name = "China",
Childern = new List()
{
new Location()
{
Name="HeBei",
Childern=new List()
{
new Location(){Name="TangShan"},
new Location(){Name="ShiJiaZhuang"}
}
},
new Location(){Name="BeiJing"}
}
};
List list = new List() { loc };
treeView.ItemsSource = list;
运行程序,我们发现已经成功搭建出了这么一棵树:
2、为树的Item添加点击事件。
中我们为树绑定数据源,如果我们需要给每个Item添加事件或者显示Style,我们就需要用到,接下来我们为每个Item添加一个选中事件SelectedItemChanged:
private void item_SelectedItemChanged(object sender, RoutedEventArgs e)
{
MessageBox.Show("ItemSelected");
}
4.展开全部树节点。运行时我们发现,树节点是默认全部折叠的,此时需要我们用代码进行打开。首先说明一下,通过这种方式创建的树,每个树节点其实包含两部分内容,一个是我们用于绑定的数据,另一个是用于盛放该数据的容器,我们展开树节点的方法就是通过递归的方式,找到每个树节点的容器,然后利用其IsExpanded
属性进行展开,其代码如下:
/展开全部树节点Ì?
public static void ExpandAll(System.Windows.Controls.TreeView treeView)
{
//展1开a全¨?部?树º¡Â节¨²点Ì?
ExpandInternal(treeView);
}
///
/// 递ÌY归¨¦展1开a全¨?部?树º¡Â节¨²点Ì?
///
///
private static void ExpandInternal(System.Windows.Controls.ItemsControl targetItemContainer)
{
var itemsControl = targetItemContainer as ItemsControl;
if (itemsControl == null || itemsControl.ItemsSource == null) return;
foreach (object item in itemsControl.ItemsSource)
{
//获?取¨?包㨹含?节¨²点Ì?的Ì?容¨Y器¡Â
TreeViewItem container = itemsControl.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItem;
if (container != null)
{
//全¨?部?展1开a
container.IsExpanded = true;
if (container.ItemContainerGenerator.Status != System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
{
container.UpdateLayout();
}
}
ExpandInternal(container);
}