WPF TreeView

1、不同于Windows Forms,当前WPF版本没有提供一个直接的方法可以把TreeView控件所有的节点都展开。一般来说,在WPF中有两种方法可以实现这个功能。第一种方法就像下面例子一样使用样式展开所有节点:

<Window xmlns= "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x= "http://schemas.microsoft.com/winfx/2006/xaml"
         x:Class= "ControlTest2.TreeViewTest"  Width= "500" >
     <Window.Resources>
         <XmlDataProvider x:Key= "treeData"  XPath= "*" >
             <x:XData>
                 <Items Name= "Items"  xmlns= "" >
                     <Item1/>
                     <Item2>
                         <Item22/>
                         <Item12/>
                         <Item13>
                             <Item131/>
                             <Item131/>
                         </Item13>
                     </Item2>
                 </Items>
             </x:XData>
 
         </XmlDataProvider>
         <HierarchicalDataTemplate ItemsSource= "{Binding XPath=child::*}"    x:Key= "template" >
             <TextBlock Name= "textBlock"  Text= "{Binding Name}" />
         </HierarchicalDataTemplate>
     </Window.Resources>
     <WrapPanel>
         <TreeView ItemTemplate= "{StaticResource template}"
            ItemsSource= "{Binding Source={StaticResource treeData}}" >
             <TreeView.ItemContainerStyle>
                 <!--Using style setter to set  the TreeViewItem.IsExpanded property to true , this  will be applied
       to all TreeViweItems when they are generated-->
                 <Style TargetType= "{x:Type TreeViewItem}" >
                     <Setter Property= "IsExpanded"  Value= "True" />
                 </Style>
             </TreeView.ItemContainerStyle>
         </TreeView>
     </WrapPanel>
</Window>

  参考:http://social.msdn.microsoft.com/Forums/zh-CN/wpfzhchs/thread/857fdaa9-5c67-4e0a-a1fd-037f72577c76



本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2011/11/14/2248326.html,如需转载请自行联系原作者

### WPF TreeView 控件概述 WPF (Windows Presentation Foundation) 是 Microsoft 提供的一个用于构建 Windows 客户端应用程序的框架。其中 `TreeView` 控件是一个层次结构列表控件,通常用于显示具有父子关系的数据项。 #### 创建基本的 TreeView 结构 为了创建一个简单的 `TreeView`,可以先定义 XAML 文件中的基础布局: ```xml <TreeView> <TreeViewItem Header="Root Node"> <TreeViewItem Header="Child Item 1"/> <TreeViewItem Header="Child Item 2"/> </TreeViewItem> </TreeView> ``` 这段代码展示了如何通过静态方式声明树形视图及其子节点[^1]。 #### 动态加载相同类型的数据显示 当处理大量数据或不确定数量的孩子节点时,可以通过编程的方式动态添加这些条目到 `TreeView` 中。下面展示了一种基于 MVVM 模式的做法,在 ViewModel 类里管理模型集合,并将其绑定给 UI 组件: ```csharp internal class TreeViewModel { public string Name { get; set; } // 子级项目的集合 public ObservableCollection<TreeViewModel> Children { get; set; } = new(); } ``` 此模式允许开发者轻松地向现有节点追加新的分支而无需修改界面设计部分[^2]。 #### 泛型 TreeNode 的实现 对于更复杂的应用场景来说,可能还需要支持不同类型的数据源作为节点的内容。这时就可以考虑引入泛型参数来增强灵活性: ```csharp public partial class TreeNodeBase<T> : INotifyPropertyChanged, ITreeNode { private readonly T _data; private ObservableCollection<TreeNodeBase<T>> _nodes; public event PropertyChangedEventHandler? PropertyChanged; protected void OnPropertyChanged([CallerMemberName]string propertyName = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); public TreeNodeBase(T data) => _data = data; /// <summary> /// 获取当前实例所表示的对象. /// </summary> public T Data => _data; /// <summary> /// 获取或设置与此节点关联的一组子节点. /// </summary> public ObservableCollection<TreeNodeBase<T>> Nodes { get => _nodes ??= new(); set { if (_nodes != value) { _nodes = value; OnPropertyChanged(nameof(Nodes)); } } } } ``` 上述类实现了对任意类型元素的支持,并提供了通知机制以便于更新UI界面上的变化情况[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值