public override bool DragAndDrop_HandleDrop(Package p, int x, int y) { Point pos = CanvasPosToLocal(new Point(x, y)); Dock dir = GetDroppedTabDirection(pos.X, pos.Y); Invalidate(); DockedTabControl addTo = m_DockedTabControl; if (dir == Dock.Fill && addTo == null) { return(false); } if (dir != Dock.Fill) { DockBase dock = GetChildDock(dir); addTo = dock.m_DockedTabControl; if (!m_DropFar) { dock.BringToFront(); } else { dock.SendToBack(); } } if (p.Name == "TabButtonMove") { TabButton tabButton = DragAndDrop.SourceControl as TabButton; if (null == tabButton) { return(false); } addTo.AddPage(tabButton); } if (p.Name == "TabWindowMove") { DockedTabControl tabControl = DragAndDrop.SourceControl as DockedTabControl; if (null == tabControl) { return(false); } if (tabControl == addTo) { return(false); } tabControl.MoveTabsTo(addTo); } return(true); }
/// <summary> /// Initializes an inner docked control for the specified position. /// </summary> /// <param name="pos">Dock position.</param> protected virtual void SetupChildDock(Dock pos) { if (m_DockedTabControl == null) { m_DockedTabControl = new DockedTabControl(this); m_DockedTabControl.TabRemoved += OnTabRemoved; m_DockedTabControl.TabStripPosition = Dock.Bottom; m_DockedTabControl.TitleBarVisible = true; } Dock = pos; Dock sizeDir; if (pos == Dock.Right) { sizeDir = Dock.Left; } else if (pos == Dock.Left) { sizeDir = Dock.Right; } else if (pos == Dock.Top) { sizeDir = Dock.Bottom; } else if (pos == Dock.Bottom) { sizeDir = Dock.Top; } else { throw new ArgumentException("Invalid dock", "pos"); } if (m_Sizer != null) { m_Sizer.Dispose(); } m_Sizer = new Resizer(this); m_Sizer.Dock = sizeDir; m_Sizer.ResizeDir = sizeDir; if (sizeDir == Dock.Left || sizeDir == Dock.Right) { m_Sizer.Width = 2; } else { m_Sizer.Height = 2; } }
public void MoveTabsTo(DockedTabControl target) { var children = TabStrip.Children.ToArray(); // copy because collection will be modified foreach (ControlBase child in children) { TabButton button = child as TabButton; if (button == null) { continue; } target.AddPage(button); } Invalidate(); }