using System.Diagnostics; using Microsoft.UI.Xaml.Controls; namespace RustTools.Editor; public class EditorTreeView : TreeView { public EditorTreeView() { //点击事件 this.ItemInvoked += TreeView_ItemInvoked; // TreeView.Expanding //当用户点击小箭头展开节点时触发。 //TreeView.Collapsed //当用户点击小箭头折叠节点时触发。 this.Expanding += TreeView_Expanding; this.Collapsed += TreeView_Collapsed; } private async void TreeView_ItemInvoked(TreeView sender, TreeViewItemInvokedEventArgs args) { // 获取触发点击的 TreeViewItem var treeViewItem = sender.ContainerFromItem(args.InvokedItem) as TreeViewItem; if (args.InvokedItem is FileItem invokedItem) { if (invokedItem.IsFolder) { //invokedItem.Children.Clear(); //Debug.WriteLine($"Folder clicked: {invokedItem.Name}"); //// 异步加载子项数据 //var newChildren = await Task.Run(() => EditorLoad.GetData(invokedItem.Dir)); //// 更新 Children 集合 //foreach (var child in newChildren) //{ // invokedItem.Children.Add(child); //} //// 展开 TreeViewItem //if (treeViewItem != null&&treeViewItem.IsExpanded==false) //{ // treeViewItem.IsExpanded = true; //} } else { Debug.WriteLine($"File clicked: {invokedItem.Name}"); EditorWin.TabViewList.Add(new TabViewItem() { Header = invokedItem.Name, }); } } } // TreeView.Expanding 事件 private async void TreeView_Expanding(TreeView sender, TreeViewExpandingEventArgs args) { if (args.Item is FileItem expandingItem) { Debug.WriteLine($"Expanding: {expandingItem.Name}"); // 如果需要动态加载子项(仅当没有加载过子项时) if (expandingItem.IsFolder) { expandingItem.Children.Clear(); var newChildren = await Task.Run(() => EditorLoad.GetData(expandingItem.Dir)); // 更新 Children 集合 foreach (var child in newChildren) { expandingItem.Children.Add(child); } Debug.WriteLine($"Loaded children for: {expandingItem.Name}"); } } } // TreeView.Collapsed 事件 private void TreeView_Collapsed(TreeView sender, TreeViewCollapsedEventArgs args) { if (args.Item is FileItem collapsedItem) { // 清空子节点集合 if (collapsedItem.IsFolder && collapsedItem.Children != null) { // 设置当前项的所有子节点的 IsExpanded 为 false //SetIsExpandedForChildren(collapsedItem, false); Debug.WriteLine($"Children cleared for: {collapsedItem.Name}"); } // 处理折叠事件(例如,清理子项、节省资源等) } } // 递归设置子节点的 IsExpanded 为 false private void SetIsExpandedForChildren(FileItem item, bool isExpanded) { foreach (var child in item.Children) { // 设置每个子项的 IsExpanded 状态 child.IsExpanded = isExpanded; // 如果子项有子节点,递归处理 if (child.IsFolder && child.Children.Count > 0) { SetIsExpandedForChildren(child, isExpanded); } } } }