internal void AlignToTarget(TargetArgs args) { if (args.DockContainer != DockHost) { DockHost = args.DockContainer; if (DockHost == null) { DockArea = Rect.Empty; } else { DockArea = new Rect( DockHost.ContentHost.TranslatePoint(new Point(), this), DockHost.ContentHost.RenderSize ); } } var host = args.TabWell as FrameworkElement ?? args.DocumentContainer; if (host != TargetHost) { TargetHost = host; if (TargetHost == null) { TargetArea = Rect.Empty; } else { TargetArea = new Rect( TargetHost.TranslatePoint(new Point(), this), TargetHost.RenderSize ); } } var isAllTools = args.SourceItems.All(i => i.ItemType == TabItemType.Tool); CanDockOuter = isAllTools; if (TargetHost is DocumentWell) { CanDropCenter = true; CanDockTarget = isAllTools; var panel = TargetHost.FindVisualAncestor <DocumentContainer>(); CanSplitHorizontal = panel?.Orientation == Orientation.Horizontal || panel?.Items.Count <= 1; CanSplitVertical = panel?.Orientation == Orientation.Vertical || panel?.Items.Count <= 1; } else if (TargetHost is DocumentContainer) { CanDropCenter = true; CanDockTarget = isAllTools; CanSplitHorizontal = CanSplitVertical = false; } else if (TargetHost is ToolWell) { CanDockTarget = false; CanSplitHorizontal = CanSplitVertical = CanDropCenter = isAllTools; } else { CanDockTarget = CanSplitHorizontal = CanSplitVertical = CanDropCenter = false; } DockTargetButton.UpdateCursor(); UpdateHighlightPath(args.SourceItems, args.TabItem); }
public void SetTargetParams(TargetArgs args) { Panel.Visibility = Visibility.Visible; Panel.AlignToTarget(args); }