WPF 图层管理

置顶:
private void BringToFront(List<UIElement> CurrentSelection ,UIElementCollection childrens)
      {
          List<UIElement> selectionSorted = (from item in CurrentSelection
                                             orderby Canvas.GetZIndex(item as UIElement) ascending
                                             select item as UIElement).ToList();
 
          List<UIElement> childrenSorted = (from UIElement item in childrens
                                            orderby Canvas.GetZIndex(item as UIElement) ascending
                                            select item as UIElement).ToList();
 
          int i = 0;
          int j = 0;
          foreach (UIElement item in childrenSorted)
          {
              if (selectionSorted.Contains(item))
              {
                  int idx = Canvas.GetZIndex(item);
                  Canvas.SetZIndex(item, childrenSorted.Count - selectionSorted.Count + j++);
              }
              else
              {
                  Canvas.SetZIndex(item, i++);
              }
          }
      }

置底:

private void SendToBack(List<UIElement> CurrentSelection ,UIElementCollection childrens)<BR>        {
         List<UIElement> selectionSorted = (from item in CurrentSelection
                                            orderby Canvas.GetZIndex(item as UIElement) ascending
                                            select item as UIElement).ToList();
 
         List<UIElement> childrenSorted = (from UIElement item in childrens<BR>
                                           orderby Canvas.GetZIndex(item as UIElement) ascending
                                           select item as UIElement).ToList();
         int i = 0;
         int j = 0;
         foreach (UIElement item in childrenSorted)
         {
             if (selectionSorted.Contains(item))
             {
                 int idx = Canvas.GetZIndex(item);
                 Canvas.SetZIndex(item, j++);
 
             }
             else
             {
                 Canvas.SetZIndex(item, selectionSorted.Count + i++);
             }
         }
     }

 置下一层:

private void SendBackward(List<UIElement> CurrentSelection ,UIElementCollection childrens)
<SPAN class=Apple-style-span>        {
            List<UIElement> ordered = (from item in CurrentSelection
                                       orderby Canvas.GetZIndex(item as UIElement) ascending
                                       select item as UIElement).ToList();
  
            int count = </SPAN>childrens.Count;<BR><SPAN class=Apple-style-span>
            for (int i = 0; i < ordered.Count; i++)
            {
                int currentIndex = Canvas.GetZIndex(ordered[i]);
                int newIndex = Math.Max(i, currentIndex - 1);
                if (currentIndex != newIndex)
                {
                    Canvas.SetZIndex(ordered[i], newIndex);
                    IEnumerable<UIElement> it =</SPAN>childrens.OfType<UIElement>().Where(item => Canvas.GetZIndex(item) == newIndex);<BR><SPAN class=Apple-style-span>
                    foreach (UIElement elm in it)
                    {
                        if (elm != ordered[i])
                        {
                            Canvas.SetZIndex(elm, currentIndex);
                            break;
                        }
                    }
                }
            }
        }
</SPAN>

 置上一层:

private void BringForward(List<UIElement> CurrentSelection ,UIElementCollection childrens)
<SPAN class=Apple-style-span>        {
            List<UIElement> ordered = (from item in CurrentSelection
                                       orderby Canvas.GetZIndex(item as UIElement) descending
                                       select item as UIElement).ToList();
  
            int count = </SPAN>childrens.Count;<BR><SPAN class=Apple-style-span>
            for (int i = 0; i < ordered.Count; i++)
            {
                int currentIndex = Canvas.GetZIndex(ordered[i]);
                int newIndex = Math.Min(count - 1 - i, currentIndex + 1);
                if (currentIndex != newIndex)
                {
                    Canvas.SetZIndex(ordered[i], newIndex);
                    IEnumerable<UIElement> it = this.Children.OfType<UIElement>().Where(item => Canvas.GetZIndex(item) == newIndex);
  
                    foreach (UIElement elm in it)
                    {
                        if (elm != ordered[i])
                        {
                            Canvas.SetZIndex(elm, currentIndex);
                            break;
                        }
                    }
                }
            }
        }
</SPAN>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值