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强制刷新了界面。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端