WIn_RustTools/Editor/EditorTreeView.cs

113 lines
3.7 KiB
C#
Raw Normal View History

2024-08-13 10:47:12 +00:00

2024-08-15 01:40:33 +00:00
using System.Diagnostics;
using Microsoft.UI.Xaml.Controls;
2024-08-13 10:47:12 +00:00
namespace RustTools.Editor;
2024-08-15 01:40:33 +00:00
public class EditorTreeView : TreeView
2024-08-13 10:47:12 +00:00
{
2024-08-13 10:47:12 +00:00
public EditorTreeView()
{
//点击事件
this.ItemInvoked += TreeView_ItemInvoked;
// TreeView.Expanding
//当用户点击小箭头展开节点时触发。
//TreeView.Collapsed
//当用户点击小箭头折叠节点时触发。
this.Expanding += TreeView_Expanding;
this.Collapsed += TreeView_Collapsed;
2024-08-13 10:47:12 +00:00
}
private async void TreeView_ItemInvoked(TreeView sender, TreeViewItemInvokedEventArgs args)
2024-08-15 01:40:33 +00:00
{
// 获取触发点击的 TreeViewItem
var treeViewItem = sender.ContainerFromItem(args.InvokedItem) as TreeViewItem;
2024-08-13 10:47:12 +00:00
2024-08-13 11:30:40 +00:00
if (args.InvokedItem is FileItem invokedItem)
2024-08-13 11:30:40 +00:00
{
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,
});
}
2024-08-13 11:30:40 +00:00
}
2024-08-13 10:47:12 +00:00
}
// TreeView.Expanding 事件
private async void TreeView_Expanding(TreeView sender, TreeViewExpandingEventArgs args)
2024-08-13 10:47:12 +00:00
{
if (args.Item is FileItem expandingItem)
2024-08-13 10:47:12 +00:00
{
Debug.WriteLine($"Expanding: {expandingItem.Name}");
// 如果需要动态加载子项(仅当没有加载过子项时)
if (expandingItem.IsFolder)
2024-08-13 10:47:12 +00:00
{
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}");
2024-08-13 10:47:12 +00:00
}
}
}
// TreeView.Collapsed 事件
private void TreeView_Collapsed(TreeView sender, TreeViewCollapsedEventArgs args)
2024-08-13 10:47:12 +00:00
{
if (args.Item is FileItem collapsedItem)
2024-08-13 10:47:12 +00:00
{
// 清空子节点集合
if (collapsedItem.IsFolder && collapsedItem.Children != null)
{
// 设置当前项的所有子节点的 IsExpanded 为 false
//SetIsExpandedForChildren(collapsedItem, false);
Debug.WriteLine($"Children cleared for: {collapsedItem.Name}");
}
// 处理折叠事件(例如,清理子项、节省资源等)
2024-08-13 10:47:12 +00:00
}
}
// 递归设置子节点的 IsExpanded 为 false
private void SetIsExpandedForChildren(FileItem item, bool isExpanded)
2024-08-13 10:47:12 +00:00
{
foreach (var child in item.Children)
2024-08-13 10:47:12 +00:00
{
// 设置每个子项的 IsExpanded 状态
child.IsExpanded = isExpanded;
2024-08-13 10:47:12 +00:00
// 如果子项有子节点,递归处理
if (child.IsFolder && child.Children.Count > 0)
2024-08-13 10:47:12 +00:00
{
SetIsExpandedForChildren(child, isExpanded);
2024-08-13 10:47:12 +00:00
}
}
}
}