internal void StartDraggingFloatingWindowForPane(LayoutAnchorablePane paneModel) { if (paneModel.Children.Any(c => !c.CanFloat)) return; var paneAsPositionableElement = paneModel as ILayoutPositionableElement; var paneAsWithActualSize = paneModel as ILayoutPositionableElementWithActualSize; var fwWidth = paneAsPositionableElement.FloatingWidth; var fwHeight = paneAsPositionableElement.FloatingHeight; if (fwWidth == 0.0) fwWidth = paneAsWithActualSize.ActualWidth; if (fwHeight == 0.0) fwHeight = paneAsWithActualSize.ActualHeight; var destPane = new LayoutAnchorablePane { DockWidth = paneAsPositionableElement.DockWidth, DockHeight = paneAsPositionableElement.DockHeight, DockMinHeight = paneAsPositionableElement.DockMinHeight, DockMinWidth = paneAsPositionableElement.DockMinWidth, FloatingLeft = paneAsPositionableElement.FloatingLeft, FloatingTop = paneAsPositionableElement.FloatingTop, FloatingWidth = paneAsPositionableElement.FloatingWidth, FloatingHeight = paneAsPositionableElement.FloatingHeight, }; var savePreviousContainer = paneModel.FindParent<LayoutFloatingWindow>() == null; var currentSelectedContentIndex = paneModel.SelectedContentIndex; while (paneModel.Children.Count > 0) { var contentModel = paneModel.Children[paneModel.Children.Count - 1]; if (savePreviousContainer) { var contentModelAsPreviousContainer = (ILayoutPreviousContainer)contentModel; contentModelAsPreviousContainer.PreviousContainer = paneModel; contentModel.PreviousContainerIndex = paneModel.Children.Count - 1; } paneModel.RemoveChildAt(paneModel.Children.Count - 1); destPane.Children.Insert(0, contentModel); } if (destPane.Children.Count > 0) { destPane.SelectedContentIndex = currentSelectedContentIndex; } LayoutFloatingWindow fw = new LayoutAnchorableFloatingWindow() { RootPanel = new LayoutAnchorablePaneGroup( destPane) { DockHeight = destPane.DockHeight, DockWidth = destPane.DockWidth, DockMinHeight = destPane.DockMinHeight, DockMinWidth = destPane.DockMinWidth, } }; Layout.FloatingWindows.Add(fw); LayoutFloatingWindowControl fwc = new LayoutAnchorableFloatingWindowControl( (LayoutAnchorableFloatingWindow)fw) { Width = fwWidth, Height = fwHeight }; _fwList.Add(fwc); Layout.CollectGarbage(); InvalidateArrange(); fwc.AttachDrag(); fwc.Show(); }