diff --git a/DarkUI/DarkUI.csproj b/DarkUI/DarkUI.csproj
index 3156143..f02f8c3 100644
--- a/DarkUI/DarkUI.csproj
+++ b/DarkUI/DarkUI.csproj
@@ -106,6 +106,7 @@
UserControl
+
diff --git a/DarkUI/Docking/DarkDockGroup.cs b/DarkUI/Docking/DarkDockGroup.cs
index 17dcca4..22235ea 100644
--- a/DarkUI/Docking/DarkDockGroup.cs
+++ b/DarkUI/Docking/DarkDockGroup.cs
@@ -52,6 +52,8 @@ namespace DarkUI.Docking
Order = order;
_tabArea = new DarkDockTabArea(DockArea);
+
+ DockPanel.ActiveContentChanged += DockPanel_ActiveContentChanged;
}
#endregion
@@ -282,6 +284,10 @@ namespace DarkUI.Docking
var width = ClientRectangle.Width - Padding.Horizontal - _tabArea.DropdownRectangle.Width;
var offsetArea = new Rectangle(Padding.Left, 0, width, 0);
+
+ if (!_tabs.ContainsKey(DockPanel.ActiveContent))
+ return;
+
var tab = _tabs[DockPanel.ActiveContent];
if (tab.ClientRectangle.IsEmpty)
@@ -438,6 +444,23 @@ namespace DarkUI.Docking
DockPanel.ActiveContent = content;
}
+ private void DockPanel_ActiveContentChanged(object sender, DockContentEventArgs e)
+ {
+ if (!_contents.Contains(e.Content))
+ return;
+
+ if (e.Content == VisibleContent)
+ return;
+
+ VisibleContent = e.Content;
+
+ foreach (var content in _contents)
+ content.Visible = content == VisibleContent;
+
+ EnsureVisible();
+ Invalidate();
+ }
+
#endregion
#region Render Region
diff --git a/DarkUI/Docking/DarkDockPanel.cs b/DarkUI/Docking/DarkDockPanel.cs
index bd87fc1..f2b6744 100644
--- a/DarkUI/Docking/DarkDockPanel.cs
+++ b/DarkUI/Docking/DarkDockPanel.cs
@@ -1,5 +1,6 @@
using DarkUI.Config;
using DarkUI.Win32;
+using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
@@ -8,12 +9,19 @@ namespace DarkUI.Docking
{
public class DarkDockPanel : UserControl
{
+ #region Event Region
+
+ public event EventHandler ActiveContentChanged;
+
+ #endregion
+
#region Field Region
private List _contents;
private Dictionary _regions;
private DarkDockContent _activeContent;
+ private bool _switchingContent = false;
#endregion
@@ -24,6 +32,11 @@ namespace DarkUI.Docking
get { return _activeContent; }
internal set
{
+ if (_switchingContent)
+ return;
+
+ _switchingContent = true;
+
_activeContent = value;
ActiveGroup = _activeContent.DockGroup;
@@ -31,6 +44,11 @@ namespace DarkUI.Docking
foreach (var region in _regions.Values)
region.Redraw();
+
+ if (ActiveContentChanged != null)
+ ActiveContentChanged(this, new DockContentEventArgs(_activeContent));
+
+ _switchingContent = false;
}
}
diff --git a/DarkUI/Docking/EventArgs/DockContentEventArgs.cs b/DarkUI/Docking/EventArgs/DockContentEventArgs.cs
new file mode 100644
index 0000000..13ae74d
--- /dev/null
+++ b/DarkUI/Docking/EventArgs/DockContentEventArgs.cs
@@ -0,0 +1,14 @@
+using System;
+
+namespace DarkUI.Docking
+{
+ public class DockContentEventArgs : EventArgs
+ {
+ public DarkDockContent Content { get; private set; }
+
+ public DockContentEventArgs(DarkDockContent content)
+ {
+ Content = content;
+ }
+ }
+}