WPF遍历TreeView
TreeView
TreeView中的Item有两种选择,要么是TreeViewItem,要么不是TreeViewItem。只有在TreeViewItem中才能继续添加元素,以此往复。
TreeViewItem中IsExpanded表示是否展开,IsSelected表示是否选中。
通过下述方法可以将TreeView所有项展开或者收起:
private static void ExpandAllItems(ItemsControl control, bool isExpanded)
{
foreach (object item in control.Items)
{
DependencyObject obj = control.ItemContainerGenerator.ContainerFromItem(item);
if (obj is TreeViewItem)
{
TreeViewItem viewItem = obj as TreeViewItem;
viewItem.IsExpanded = isExpanded;
viewItem.UpdateLayout();
ExpandAllItems(viewItem, isExpanded);
}
}
}
注意:
- Items中就是当前项中的子项,若是未设置TreeView的ItemsSource,item就是该子项元素;
- 当绑定了 ItemsSource,item就表示绑定项中的子项,SelectedItem也是一样;
- 可以使用control.ItemContainerGenerator.ContainerFromItem(item)或者control.ItemContainerGenerator.ContainerFromIndex(0)获取一个依赖对象,不管子项为何类型,获取到的对象都是TreeViewItem,若子项为非TreeViewItem类型时,那么获取到的对象的DataContext就是该子项元素;
- 当项IsExpanded为true时才会创建节点,没有节点时那么ContainerFromItem和ContainerFromIndex获取到的对象就为null,所以上述代码中用UpdateLayout强制刷新了界面。