介绍:
TreeView`控件用于显示分层结构的数据,如文件夹结构、组织结构图等。它允许用户通过展开和折叠节点来查看和隐藏其子节点。与ListBox和ListView一样,它也是继承自ItemsControl,这意味着它可以包含任何类型的对象的集合。
基本使用:
<TreeView Name="treeView">
<TreeViewItem Header="根节点1"/>
<TreeViewItem Header="根节点2">
<TreeViewItem Header="子节点"/>
</TreeViewItem>
</TreeView>
代码动态添加或删除节点:
TreeViewItem rootNode = new TreeViewItem { Header = "新节点" };
treeView.Items.Add(rootNode); // 添加根节点
rootNode.IsExpanded = true;// 展开节点
rootNode.Items.Add(new TreeViewItem { Header = "子节点" }); // 添加子节点
数据绑定:
通过 HierarchicalDataTemplate 绑定分层数据,支持无限级嵌套:
<TreeView x:Name="treeView" Width="600" Height="800" SelectedItemChanged="treeView_SelectedItemChanged">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
public jianshuWin()
{
InitializeComponent();
List<User> users = AddUser("根节点", 5);
var item = users[0];
item.Children = AddUser("子节点", 3);
var item2 = item.Children[1];
item2.Children = AddUser("最后节点", 2);
this.treeView.ItemsSource = users;
}
private List<User> AddUser(string nameStr, int count)
{
List<User> list = new List<User>();
for (int i = 0; i < count; i++)
{
var user = new User();
user.Name = nameStr + i;
list.Add(user);
}
return list;
}
public class User
{
public string? Name { get; set; }
public List<User>? Children { get; set; }
}
事件处理
private void treeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
var selectedItem = e.NewValue as User;
MessageBox.Show($"You selected: {selectedItem?.Name}");
//var selectedItem = (User)this.treeView.SelectedItem;
//MessageBox.Show($"You selected: {selectedItem?.Name}");
}