internal LayoutDocumentFloatingWindowControl(LayoutDocumentFloatingWindow model) : base(model) { _model = model; ShowInTaskbar = true; Loaded += LayoutDocumentFloatingWindowControl_Loaded; }
internal void StartDraggingFloatingWindowForContent(LayoutContent contentModel, bool startDrag = true) { if (!contentModel.CanFloat) return; var contentModelAsAnchorable = contentModel as LayoutAnchorable; if (contentModelAsAnchorable != null && contentModelAsAnchorable.IsAutoHidden) contentModelAsAnchorable.ToggleAutoHide(); var parentPane = contentModel.Parent as ILayoutPane; var parentPaneAsPositionableElement = contentModel.Parent as ILayoutPositionableElement; var parentPaneAsWithActualSize = contentModel.Parent as ILayoutPositionableElementWithActualSize; // ReSharper disable once PossibleNullReferenceException List<ILayoutElement> list = parentPane.Children.ToList(); var contentModelParentChildrenIndex = list.IndexOf(contentModel); if (contentModel.FindParent<LayoutFloatingWindow>() == null) { ((ILayoutPreviousContainer)contentModel).PreviousContainer = parentPane; contentModel.PreviousContainerIndex = contentModelParentChildrenIndex; } parentPane.RemoveChildAt(contentModelParentChildrenIndex); double fwWidth = contentModel.FloatingWidth; double fwHeight = contentModel.FloatingHeight; if (fwWidth == 0.0) if (parentPaneAsPositionableElement != null) fwWidth = parentPaneAsPositionableElement.FloatingWidth; if (fwHeight == 0.0) if (parentPaneAsPositionableElement != null) fwHeight = parentPaneAsPositionableElement.FloatingHeight; if (fwWidth == 0.0) if (parentPaneAsWithActualSize != null) fwWidth = parentPaneAsWithActualSize.ActualWidth; if (fwHeight == 0.0) if (parentPaneAsWithActualSize != null) fwHeight = parentPaneAsWithActualSize.ActualHeight; LayoutFloatingWindow fw; LayoutFloatingWindowControl fwc; if (contentModel is LayoutAnchorable) { var anchorableContent = contentModel as LayoutAnchorable; fw = new LayoutAnchorableFloatingWindow { RootPanel = new LayoutAnchorablePaneGroup( new LayoutAnchorablePane(anchorableContent) { // ReSharper disable once PossibleNullReferenceException DockWidth = parentPaneAsPositionableElement.DockWidth, DockHeight = parentPaneAsPositionableElement.DockHeight, DockMinHeight = parentPaneAsPositionableElement.DockMinHeight, DockMinWidth = parentPaneAsPositionableElement.DockMinWidth, FloatingLeft = parentPaneAsPositionableElement.FloatingLeft, FloatingTop = parentPaneAsPositionableElement.FloatingTop, FloatingWidth = parentPaneAsPositionableElement.FloatingWidth, FloatingHeight = parentPaneAsPositionableElement.FloatingHeight, }) }; Layout.FloatingWindows.Add(fw); fwc = new LayoutAnchorableFloatingWindowControl((LayoutAnchorableFloatingWindow)fw) { Width = fwWidth, Height = fwHeight, Left = contentModel.FloatingLeft, Top = contentModel.FloatingTop }; } else { var anchorableDocument = contentModel as LayoutDocument; fw = new LayoutDocumentFloatingWindow { RootDocument = anchorableDocument }; Layout.FloatingWindows.Add(fw); fwc = new LayoutDocumentFloatingWindowControl((LayoutDocumentFloatingWindow)fw) { Width = fwWidth, Height = fwHeight, Left = contentModel.FloatingLeft, Top = contentModel.FloatingTop }; } _fwList.Add(fwc); Layout.CollectGarbage(); UpdateLayout(); Dispatcher.BeginInvoke(new Action(() => { if (startDrag) fwc.AttachDrag(); fwc.Show(); }), DispatcherPriority.Send); }