Added ActiveContentChanged event to DockPanel

This commit is contained in:
Robin 2015-12-05 23:35:31 +00:00
parent 3466c3a241
commit 2aeffecd0a
4 changed files with 56 additions and 0 deletions

View File

@ -106,6 +106,7 @@
<Compile Include="Docking\DarkToolWindow.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Docking\EventArgs\DockContentEventArgs.cs" />
<Compile Include="Docking\Items\DarkDockSplitter.cs" />
<Compile Include="Docking\Items\DarkDockTab.cs" />
<Compile Include="Docking\Items\DarkDockTabArea.cs" />

View File

@ -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

View File

@ -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<DockContentEventArgs> ActiveContentChanged;
#endregion
#region Field Region
private List<DarkDockContent> _contents;
private Dictionary<DarkDockArea, DarkDockRegion> _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;
}
}

View File

@ -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;
}
}
}