重构 EditorTreeView 以使用 Microsoft.UI.Xaml.Controls
在 `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 包引用。
This commit is contained in:
parent
7735738c3d
commit
e88ec9db04
|
@ -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<TabViewItem,CodeEditorControl> 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)
|
||||
{
|
||||
|
|
|
@ -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">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<!-- TabView header height -->
|
||||
<RowDefinition Height="*" />
|
||||
<!-- TabView content area height -->
|
||||
</Grid.RowDefinitions>
|
||||
<TabView
|
||||
x:Name="tabview"
|
||||
Grid.Row="0"
|
||||
Height="auto"
|
||||
AddTabButtonClick="MyTabView_AddTabButtonClick"
|
||||
IsAddTabButtonVisible="False"
|
||||
TabCloseRequested="MyTabView_TabCloseRequested" />
|
||||
|
||||
<!--<WinUIEditor:CodeEditorControl
|
||||
x:Name="MyEditor"
|
||||
HighlightingLanguage="csharp"
|
||||
DataContextChanged="OnCodeTextChanged" />-->
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Page>
|
||||
|
|
|
@ -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;
|
||||
/// <summary>
|
||||
/// 编辑器主窗口
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
|
||||
<PackageReference Include="Microsoft.Windows.CsWinRT" Version="2.0.7" />
|
||||
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.3233" />
|
||||
|
||||
<PackageReference Include="WinUIEdit" Version="0.0.3-prerelease" />
|
||||
<Manifest Include="$(ApplicationManifest)" />
|
||||
</ItemGroup>
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user