{ "title": "C# 使用 TreeView 实现树形菜单:选中一级节点自动选中所有二级节点", "description": "本文提供 C# 使用 TreeView 实现树形菜单的完整代码示例,包含 XAML 和 XAML.cs 文件,并演示如何实现选中一级节点时自动选中所有二级节点的功能,以及取消一级节点选中时自动取消二级节点的功能。", "keywords": "C#, TreeView, 树形菜单, 选中, 取消选中, 一级节点, 二级节点, XAML, XAML.cs, 代码示例", "content": "<TreeView.ItemTemplate></TreeView.ItemTemplate> using System.Collections.ObjectModel;using System.ComponentModel;using System.Windows;using System.Windows.Controls; namespace TreeViewExample{ public partial class MainWindow : Window{ public MainWindow(){ InitializeComponent(); var rootNode = new TreeNode { Name = "Root" }; var node1 = new TreeNode { Name = "Node 1" }; var node2 = new TreeNode { Name = "Node 2" }; var subNode1 = new TreeNode { Name = "SubNode 1" }; var subNode2 = new TreeNode { Name = "SubNode 2" }; node1.Children.Add(subNode1); node2.Children.Add(subNode2); rootNode.Children.Add(node1); rootNode.Children.Add(node2); DataContext = new ObservableCollection { rootNode }; } private void CheckBox_Click(object sender, RoutedEventArgs e){ var checkBox = (CheckBox)sender; var node = (TreeNode)checkBox.DataContext; UpdateChildrenNodeCheckState(node, checkBox.IsChecked == true); UpdateParentNodeCheckState(node.Parent, checkBox.IsChecked == true); } private void UpdateChildrenNodeCheckState(TreeNode node, bool isChecked){ foreach (var child in node.Children){ child.IsChecked = isChecked; UpdateChildrenNodeCheckState(child, isChecked); } } private void UpdateParentNodeCheckState(TreeNode node, bool isChecked){ if (node != null){ bool allChildrenChecked = true; bool allChildrenUnchecked = true; foreach (var child in node.Children){ if (child.IsChecked){ allChildrenUnchecked = false; } else { allChildrenChecked = false; } } if (isChecked){ node.IsChecked = allChildrenChecked; } else { node.IsChecked = !allChildrenUnchecked; } UpdateParentNodeCheckState(node.Parent, isChecked); } } } public class TreeNode : INotifyPropertyChanged{ private bool isChecked; public bool IsChecked { get { return isChecked; } set { isChecked = value; OnPropertyChanged("IsChecked"); } } public string Name { get; set; } public ObservableCollection Children { get; set; } = new ObservableCollection(); public TreeNode Parent { get; set; } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } }

C# 使用 TreeView 实现树形菜单:选中一级节点自动选中所有二级节点

原文地址: https://www.cveoy.top/t/topic/p1cF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录