From e92e365a3adb233eec7518763f613b2566d4680d Mon Sep 17 00:00:00 2001 From: Misaki Date: Sat, 28 Mar 2026 21:59:44 +0900 Subject: [PATCH] fix(docking): improve DockGroup robustness and state preservation --- .../View/Controls/Docking/DockGroup.cs | 22 ++++++++++++++++--- .../View/Controls/Docking/DockGroup.xaml | 4 ++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/Editor/Ghost.Editor/View/Controls/Docking/DockGroup.cs b/src/Editor/Ghost.Editor/View/Controls/Docking/DockGroup.cs index 879253f..adca60a 100644 --- a/src/Editor/Ghost.Editor/View/Controls/Docking/DockGroup.cs +++ b/src/Editor/Ghost.Editor/View/Controls/Docking/DockGroup.cs @@ -4,10 +4,10 @@ using Microsoft.UI.Xaml.Data; namespace Ghost.Editor.View.Controls.Docking; -[TemplatePart(Name = PART_TabView, Type = typeof(TabView))] +[TemplatePart(Name = PART_TAB_VIEW, Type = typeof(TabView))] public partial class DockGroup : DockContainer { - private const string PART_TabView = "PART_TabView"; + private const string PART_TAB_VIEW = "PART_TabView"; private TabView? _tabView; public DockGroup() @@ -17,6 +17,8 @@ public partial class DockGroup : DockContainer public override void AddChild(DockModule module) { + ArgumentNullException.ThrowIfNull(module); + if (module is not DockDocument) { throw new ArgumentException($"{nameof(DockGroup)} only accepts {nameof(DockDocument)} children.", nameof(module)); @@ -28,7 +30,7 @@ public partial class DockGroup : DockContainer protected override void OnApplyTemplate() { base.OnApplyTemplate(); - _tabView = GetTemplateChild(PART_TabView) as TabView; + _tabView = GetTemplateChild(PART_TAB_VIEW) as TabView; UpdateTabs(); } @@ -41,7 +43,11 @@ public partial class DockGroup : DockContainer { if (_tabView == null) return; + var selectedDoc = _tabView.SelectedItem is TabViewItem selectedItem ? selectedItem.Tag as DockDocument : null; + _tabView.TabItems.Clear(); + TabViewItem? newSelectedItem = null; + foreach (var child in Children) { if (child is DockDocument doc) @@ -66,7 +72,17 @@ public partial class DockGroup : DockContainer }); _tabView.TabItems.Add(tabItem); + + if (doc == selectedDoc) + { + newSelectedItem = tabItem; + } } } + + if (newSelectedItem != null) + { + _tabView.SelectedItem = newSelectedItem; + } } } diff --git a/src/Editor/Ghost.Editor/View/Controls/Docking/DockGroup.xaml b/src/Editor/Ghost.Editor/View/Controls/Docking/DockGroup.xaml index 417d045..f4b0f0b 100644 --- a/src/Editor/Ghost.Editor/View/Controls/Docking/DockGroup.xaml +++ b/src/Editor/Ghost.Editor/View/Controls/Docking/DockGroup.xaml @@ -10,8 +10,8 @@