Exemplo n.º 1
0
        void ArrangeWithRootItems/*递归方法,给定根节点,重新布局*/ (DesignerItem designerItem /*根节点*/)
        {
            if (designerItem == null)
            {
                return;
            }
            designerItem.SetTemplate();
            var directSubItems = GetDirectSubItems(designerItem);

            if (directSubItems == null || directSubItems.Count == 0)
            {
                return;
            }
            var subItems = directSubItems
                           .Where(x => x.Visibility.Equals(Visibility.Visible)).
                           OrderBy(x => x.YIndex).ToList();
            double h1 = 0;/*父节点的直接子节点总高度*/

            for (var i = 0; i < subItems.Count; i++)
            {
                if (i != 0)
                {
                    h1 += subItems[i - 1].ActualHeight;
                }
                var list = new List <DesignerItem>();
                for (var j = 0; j < i; j++)
                {
                    list.AddRange(GetAllSubItems(subItems.ElementAt(j)).Where(item => !list.Contains(item)) /**/);
                }
                var preChilds = list.OrderBy(x => x.YIndex).Where(x => x.Visibility.Equals(Visibility.Visible));
                var h2        = preChilds.Sum(preChild => preChild.ActualHeight);/*父节点的直接子节点的所有子节点的总高度*/
                #region 设定节点位置
                //上
                var top = designerItem.YIndex + designerItem.ActualHeight + h1 + h2;
                Canvas.SetTop(subItems.ElementAt(i), top);
                subItems.ElementAt(i).YIndex = top;
                subItems.ElementAt(i).Oldy   = top;
                //左
                var left = designerItem.XIndex + GetOffset(designerItem);
                Canvas.SetLeft(subItems.ElementAt(i), left);
                subItems.ElementAt(i).XIndex = left;
                subItems.ElementAt(i).Oldx   = left;
                #endregion
                //设定节点宽度
                SetWidth(subItems.ElementAt(i));
                ArrangeWithRootItems(subItems.ElementAt(i));/*递归*/
            }
        }
Exemplo n.º 2
0
 /*递归方法,给定根节点,重新布局*/
 void ArrangeWithRootItems(DesignerItem designerItem/*根节点*/)
 {
     if (designerItem == null) return;
     designerItem.SetTemplate();
     var directSubItems = GetDirectSubItems(designerItem);
     if (directSubItems == null || directSubItems.Count == 0) return;
     var subItems = directSubItems
         .Where(x => x.Visibility.Equals(Visibility.Visible)).
         OrderBy(x => x.YIndex).ToList();
     double h1 = 0;/*父节点的直接子节点总高度*/
     for (var i = 0; i < subItems.Count; i++)
     {
         if (i != 0) h1 += subItems[i - 1].ActualHeight;
         var list = new List<DesignerItem>();
         for (var j = 0; j < i; j++) { list.AddRange(GetAllSubItems(subItems.ElementAt(j)).Where(item => !list.Contains(item))/**/); }
         var preChilds = list.OrderBy(x => x.YIndex).Where(x => x.Visibility.Equals(Visibility.Visible));
         var h2 = preChilds.Sum(preChild => preChild.ActualHeight);/*父节点的直接子节点的所有子节点的总高度*/
         #region 设定节点位置
         //上
         var top = designerItem.YIndex + designerItem.ActualHeight + h1 + h2;
         Canvas.SetTop(subItems.ElementAt(i), top);
         subItems.ElementAt(i).YIndex = top;
         subItems.ElementAt(i).Oldy = top;
         //左
         var left = designerItem.XIndex + GetOffset(designerItem);
         Canvas.SetLeft(subItems.ElementAt(i), left);
         subItems.ElementAt(i).XIndex = left;
         subItems.ElementAt(i).Oldx = left;
         #endregion
         //设定节点宽度
         SetWidth(subItems.ElementAt(i));
         ArrangeWithRootItems(subItems.ElementAt(i));/*递归*/
     }
 }