From e88ec9db045d8d3294a1cbd11118f68199b998fd Mon Sep 17 00:00:00 2001 From: muqing <1966944300@qq.com> Date: Tue, 21 Jan 2025 19:26:04 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=20EditorTreeView=20=E4=BB=A5?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=20Microsoft.UI.Xaml.Controls?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 `EditorTreeView.cs` 中: - 添加了 `Microsoft.UI.Xaml.Controls`、`RustTools.muqing` 和 `WinUIEditor` 的引用。 - 将 `EditorTreeView` 类从继承 `TreeView` 改为继承 `Microsoft.UI.Xaml.Controls.TreeView`。 - 修改了事件处理程序的绑定方式,去掉了 `this` 关键字。 - 修改了 `TreeView_ItemInvoked`、`TreeView_Expanding` 和 `TreeView_Collapsed` 方法的参数类型,使用了 `Microsoft.UI.Xaml.Controls.TreeView`。 - 在 `TreeView_ItemInvoked` 方法中,添加了处理文件点击事件的逻辑,包括创建 `CodeEditorControl` 实例并将其添加到 `TabViewItem` 中。 - 添加了 `AddTabItem` 事件。 在 `EditorWin.xaml` 中: - 添加了 `WinUIEditor` 的命名空间引用。 - 在 `Grid` 中添加了 `RowDefinition`,用于定义 `TabView` 的头部和内容区域的高度。 - 注释掉了 `CodeEditorControl` 的 XAML 定义。 在 `EditorWin.xaml.cs` 中: - 添加了 `Microsoft.UI.Xaml.Media` 和 `WinUIEditor` 的引用。 - 在 `EditorWin` 构造函数中,添加了 `gridedit.SizeChanged` 事件处理程序,用于调整 `TabView` 的高度。 - 添加了 `TreeView_AddTabItem` 方法,用于处理 `AddTabItem` 事件。 - 删除了 `MyTabView_AddTabButtonClick` 方法。 在 `RustTools.csproj` 中: - 添加了 `WinUIEdit` 包的引用。 重构 EditorTreeView 并添加 WinUI 支持 将 EditorTreeView 类更改为 Microsoft.UI.Xaml.Controls.TreeView,添加相关命名空间引用。更新方法参数类型并处理文件点击事件。调整 EditorWin.xaml 和 EditorWin.xaml.cs 文件,添加事件处理逻辑。移除 MyTabView_AddTabButtonClick 方法,并在 RustTools.csproj 中添加 WinUIEdit 包引用。 --- Editor/EditorTreeView.cs | 56 +++++++++++++++++++++------------------- Editor/EditorWin.xaml | 12 ++++++--- Editor/EditorWin.xaml.cs | 42 ++++++++++++++++++++---------- RustTools.csproj | 2 +- 4 files changed, 67 insertions(+), 45 deletions(-) diff --git a/Editor/EditorTreeView.cs b/Editor/EditorTreeView.cs index ae2dee6..f673778 100644 --- a/Editor/EditorTreeView.cs +++ b/Editor/EditorTreeView.cs @@ -1,63 +1,67 @@ - -using System.Diagnostics; +using System.Diagnostics; using Microsoft.UI.Xaml.Controls; +using RustTools.muqing; +using WinUIEditor; namespace RustTools.Editor; -public class EditorTreeView : TreeView +public class EditorTreeView : Microsoft.UI.Xaml.Controls.TreeView { public EditorTreeView() { //点击事件 - this.ItemInvoked += TreeView_ItemInvoked; + ItemInvoked += TreeView_ItemInvoked; // TreeView.Expanding //当用户点击小箭头展开节点时触发。 //TreeView.Collapsed //当用户点击小箭头折叠节点时触发。 - this.Expanding += TreeView_Expanding; - this.Collapsed += TreeView_Collapsed; + Expanding += TreeView_Expanding; + Collapsed += TreeView_Collapsed; } - private async void TreeView_ItemInvoked(TreeView sender, TreeViewItemInvokedEventArgs args) + private void TreeView_ItemInvoked(Microsoft.UI.Xaml.Controls.TreeView sender, TreeViewItemInvokedEventArgs args) { // 获取触发点击的 TreeViewItem - var treeViewItem = sender.ContainerFromItem(args.InvokedItem) as 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}"); + var wb = wj.dqwb(invokedItem.Dir); + var codeEditorControl = new CodeEditorControl(); + codeEditorControl.Editor.SetText(wb); + //codeEditorControl.Editor.SyntaxHighlighting = fileName.EndsWith(".json") ? "Json" : "CSharp"; + EditorWin.TabViewList.Add(new TabViewItem() { Header = invokedItem.Name, + IconSource = new SymbolIconSource() { Symbol = Symbol.Document }, + Content = codeEditorControl }); + //codeEditorControl.Editor.CanUndo + codeEditorControl.Editor.EmptyUndoBuffer(); + codeEditorControl.Editor.AutoCCancelled += (sender, args) => + { + Debug.WriteLine("AutoCCancelled"); + }; + + // DefaultColorsChanged 监听的是颜色设置的变化(如主题的变化)。 + //SyntaxHighlightingApplied 监听的是语法高亮的应用,通常在文本解析后触发。 + AddTabItem?.Invoke(EditorWin.TabViewList[^1],codeEditorControl); } } } + public event Action AddTabItem; + // TreeView.Expanding 事件 - private async void TreeView_Expanding(TreeView sender, TreeViewExpandingEventArgs args) + private async void TreeView_Expanding(Microsoft.UI.Xaml.Controls.TreeView sender, TreeViewExpandingEventArgs args) { if (args.Item is FileItem expandingItem) { @@ -79,7 +83,7 @@ public class EditorTreeView : TreeView } // TreeView.Collapsed 事件 - private void TreeView_Collapsed(TreeView sender, TreeViewCollapsedEventArgs args) + private void TreeView_Collapsed(Microsoft.UI.Xaml.Controls.TreeView sender, TreeViewCollapsedEventArgs args) { if (args.Item is FileItem collapsedItem) { diff --git a/Editor/EditorWin.xaml b/Editor/EditorWin.xaml index fc29f43..073137b 100644 --- a/Editor/EditorWin.xaml +++ b/Editor/EditorWin.xaml @@ -3,11 +3,11 @@ x:Class="RustTools.Editor.EditorWin" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:WinUIEditor="using:WinUIEditor" xmlns:controlpages="using:RustTools.Editor" xmlns:controls="using:CommunityToolkit.WinUI.Controls" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:editor="using:RustTools.Editor" - xmlns:local="using:RustTools" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:windowex="using:WinUIEx" MinWidth="500" @@ -103,16 +103,20 @@ Grid.Row="1" Grid.Column="2"> + + + + diff --git a/Editor/EditorWin.xaml.cs b/Editor/EditorWin.xaml.cs index 9da7e9d..9ef4f1f 100644 --- a/Editor/EditorWin.xaml.cs +++ b/Editor/EditorWin.xaml.cs @@ -4,8 +4,10 @@ using Microsoft.UI; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Input; +using Microsoft.UI.Xaml.Media; using RustTools.muqing; using WinRT.Interop; +using WinUIEditor; namespace RustTools.Editor; /// /// ༭ @@ -39,10 +41,35 @@ public sealed partial class EditorWin : WindowEx DataSource = EditorLoad.GetData(directoryInfo.FullName); treeView.ItemsSource = DataSource; Closed += EditorWin_Closed; - tabview.TabItemsSource = TabViewList; + //TabViewĸ߶ + gridedit.SizeChanged += (sender, args) => + { + tabview.Height = gridedit.ActualHeight - 10; + }; + tabview.TabItemsSource = TabViewList; + treeView.AddTabItem += TreeView_AddTabItem; } + private void TreeView_AddTabItem(TabViewItem obj,CodeEditorControl codeEditorControl){ + tabview.SelectedItem = obj; + var title = obj.Header.ToString(); + codeEditorControl.Editor.UpdateUI += (sender, args) => + { + //ǷпԳʷ¼ + var a = codeEditorControl.Editor.CanUndo(); + + if (a) + { + obj.Header = $"{title} *"; + } + else + { + obj.Header = title; + } + Debug.WriteLine($"UpdateUI :" + a); + }; + } //ûûб @@ -86,18 +113,6 @@ public sealed partial class EditorWin : WindowEx } ClosedDialog = null; } - - - // ѡ - private void MyTabView_AddTabButtonClick(TabView sender, object args) - { - var newTab = new TabViewItem - { - Header = $"New Tab {TabViewList.Count + 1}", - Content = new TextBlock { Text = "This is a new tab." } - }; - TabViewList.Add(newTab); - } // رѡ private void MyTabView_TabCloseRequested(TabView sender, TabViewTabCloseRequestedEventArgs args) { @@ -106,5 +121,4 @@ public sealed partial class EditorWin : WindowEx TabViewList.Remove(tab); } } - } diff --git a/RustTools.csproj b/RustTools.csproj index f774728..b26787f 100644 --- a/RustTools.csproj +++ b/RustTools.csproj @@ -35,7 +35,7 @@ - +