重构 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 Microsoft.UI.Xaml.Controls;
|
||||||
|
using RustTools.muqing;
|
||||||
|
using WinUIEditor;
|
||||||
namespace RustTools.Editor;
|
namespace RustTools.Editor;
|
||||||
|
|
||||||
public class EditorTreeView : TreeView
|
public class EditorTreeView : Microsoft.UI.Xaml.Controls.TreeView
|
||||||
{
|
{
|
||||||
|
|
||||||
public EditorTreeView()
|
public EditorTreeView()
|
||||||
{
|
{
|
||||||
//点击事件
|
//点击事件
|
||||||
this.ItemInvoked += TreeView_ItemInvoked;
|
ItemInvoked += TreeView_ItemInvoked;
|
||||||
// TreeView.Expanding
|
// TreeView.Expanding
|
||||||
//当用户点击小箭头展开节点时触发。
|
//当用户点击小箭头展开节点时触发。
|
||||||
|
|
||||||
//TreeView.Collapsed
|
//TreeView.Collapsed
|
||||||
//当用户点击小箭头折叠节点时触发。
|
//当用户点击小箭头折叠节点时触发。
|
||||||
this.Expanding += TreeView_Expanding;
|
Expanding += TreeView_Expanding;
|
||||||
this.Collapsed += TreeView_Collapsed;
|
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
|
// 获取触发点击的 TreeViewItem
|
||||||
var treeViewItem = sender.ContainerFromItem(args.InvokedItem) as TreeViewItem;
|
//var treeViewItem = sender.ContainerFromItem(args.InvokedItem) as TreeViewItem;
|
||||||
|
|
||||||
|
|
||||||
if (args.InvokedItem is FileItem invokedItem)
|
if (args.InvokedItem is FileItem invokedItem)
|
||||||
{
|
{
|
||||||
if (invokedItem.IsFolder)
|
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
|
else
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"File clicked: {invokedItem.Name}");
|
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()
|
EditorWin.TabViewList.Add(new TabViewItem()
|
||||||
{
|
{
|
||||||
Header = invokedItem.Name,
|
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 事件
|
// 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)
|
if (args.Item is FileItem expandingItem)
|
||||||
{
|
{
|
||||||
|
@ -79,7 +83,7 @@ public class EditorTreeView : TreeView
|
||||||
}
|
}
|
||||||
|
|
||||||
// TreeView.Collapsed 事件
|
// 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)
|
if (args.Item is FileItem collapsedItem)
|
||||||
{
|
{
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
x:Class="RustTools.Editor.EditorWin"
|
x:Class="RustTools.Editor.EditorWin"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:WinUIEditor="using:WinUIEditor"
|
||||||
xmlns:controlpages="using:RustTools.Editor"
|
xmlns:controlpages="using:RustTools.Editor"
|
||||||
xmlns:controls="using:CommunityToolkit.WinUI.Controls"
|
xmlns:controls="using:CommunityToolkit.WinUI.Controls"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:editor="using:RustTools.Editor"
|
xmlns:editor="using:RustTools.Editor"
|
||||||
xmlns:local="using:RustTools"
|
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:windowex="using:WinUIEx"
|
xmlns:windowex="using:WinUIEx"
|
||||||
MinWidth="500"
|
MinWidth="500"
|
||||||
|
@ -103,16 +103,20 @@
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="2">
|
Grid.Column="2">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<!-- TabView header height -->
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
|
<!-- TabView content area height -->
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<TabView
|
<TabView
|
||||||
x:Name="tabview"
|
x:Name="tabview"
|
||||||
Grid.Row="0"
|
|
||||||
Height="auto"
|
|
||||||
AddTabButtonClick="MyTabView_AddTabButtonClick"
|
|
||||||
IsAddTabButtonVisible="False"
|
IsAddTabButtonVisible="False"
|
||||||
TabCloseRequested="MyTabView_TabCloseRequested" />
|
TabCloseRequested="MyTabView_TabCloseRequested" />
|
||||||
|
|
||||||
|
<!--<WinUIEditor:CodeEditorControl
|
||||||
|
x:Name="MyEditor"
|
||||||
|
HighlightingLanguage="csharp"
|
||||||
|
DataContextChanged="OnCodeTextChanged" />-->
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Page>
|
</Page>
|
||||||
|
|
|
@ -4,8 +4,10 @@ using Microsoft.UI;
|
||||||
using Microsoft.UI.Xaml;
|
using Microsoft.UI.Xaml;
|
||||||
using Microsoft.UI.Xaml.Controls;
|
using Microsoft.UI.Xaml.Controls;
|
||||||
using Microsoft.UI.Xaml.Input;
|
using Microsoft.UI.Xaml.Input;
|
||||||
|
using Microsoft.UI.Xaml.Media;
|
||||||
using RustTools.muqing;
|
using RustTools.muqing;
|
||||||
using WinRT.Interop;
|
using WinRT.Interop;
|
||||||
|
using WinUIEditor;
|
||||||
namespace RustTools.Editor;
|
namespace RustTools.Editor;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 编辑器主窗口
|
/// 编辑器主窗口
|
||||||
|
@ -39,10 +41,35 @@ public sealed partial class EditorWin : WindowEx
|
||||||
DataSource = EditorLoad.GetData(directoryInfo.FullName);
|
DataSource = EditorLoad.GetData(directoryInfo.FullName);
|
||||||
treeView.ItemsSource = DataSource;
|
treeView.ItemsSource = DataSource;
|
||||||
Closed += EditorWin_Closed;
|
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;
|
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)
|
private void MyTabView_TabCloseRequested(TabView sender, TabViewTabCloseRequestedEventArgs args)
|
||||||
{
|
{
|
||||||
|
@ -106,5 +121,4 @@ public sealed partial class EditorWin : WindowEx
|
||||||
TabViewList.Remove(tab);
|
TabViewList.Remove(tab);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
|
|
||||||
<PackageReference Include="Microsoft.Windows.CsWinRT" Version="2.0.7" />
|
<PackageReference Include="Microsoft.Windows.CsWinRT" Version="2.0.7" />
|
||||||
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.3233" />
|
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.3233" />
|
||||||
|
<PackageReference Include="WinUIEdit" Version="0.0.3-prerelease" />
|
||||||
<Manifest Include="$(ApplicationManifest)" />
|
<Manifest Include="$(ApplicationManifest)" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user