List<DesignerItem> Arrange(DesignerItem designerItem) { List<DesignerItem> list = new List<DesignerItem>(); if (designerItem == null) return list; var directSubItems = designerItem.ChildrenDesignerItems; designerItem.UpdateExpander(); if (directSubItems == null || directSubItems.Count == 0) return list; var subItems = directSubItems .OrderBy(x => Canvas.GetTop(x)).ToList(); foreach (var sub in subItems) { var top = double.IsNaN(Canvas.GetTop(designerItem)) ? 0 : Canvas.GetTop(designerItem) + designerItem.ActualHeight + list.Sum(x => x.ActualHeight); list.Add(sub); var left = Canvas.GetLeft(designerItem) + GetOffset(designerItem); Canvas.SetTop(sub, top); Canvas.SetLeft(sub, left); SavePosition(sub); list.AddRange(Arrange(sub));/*递归*/ } return list; }
void ChangeParent(DesignerItem newParent, DesignerItem designerItem) { if (newParent != null) { if (designerItem.ParentDesignerItem != null) { designerItem.ParentDesignerItem.ChildrenDesignerItems.Remove(designerItem); } designerItem.UpdateExpander(); designerItem.ParentDesignerItem = newParent; newParent.ChildrenDesignerItems.Add(designerItem); } }
public void DrawChild(DesignerItem designerItem, DesignerItem childItem, List<DesignerItem> list) { if (designerItem == null) return; DrawDesignerItem(childItem);/*创建子节点*/ childItem.UpdateLayout(); childItem.SetTemplate(); var top = Canvas.GetTop(designerItem) + designerItem.ActualHeight + list.Sum(x => x.ActualHeight); list.Add(childItem); var left = Canvas.GetLeft(designerItem) + GetOffset(designerItem); Canvas.SetTop(childItem, top); Canvas.SetLeft(childItem, left); SavePosition(childItem); childItem.UpdateLayout(); var source = GetItemConnector(designerItem, PARENT_CONNECTOR); var sink = GetItemConnector(childItem, "Left"); if (source == null || sink == null) return; #region 创建连线 var conn = new Connection(source, sink); /*创建连线*/ DesignerCanvas.Children.Add(conn); /*放到画布上*/ Panel.SetZIndex(conn, -10000); #endregion childItem.CanCollapsed = true; childItem.UpdateExpander(); }