玩过phtoshop或者blend的人都知道里面都一个图层管理器,管理图层的遮挡顺序,有置顶层、置底层、置下一层、置上一层四个管理方式。

那么在wof中我们应该怎么玩呢? 请看代码,支持多个图层同时操作。

首先置顶:

  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)
{ 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, j++); } else { Canvas.SetZIndex(item, selectionSorted.Count + i++); } } }

 置下一层:

 private void SendBackward(List<UIElement> CurrentSelection ,UIElementCollection childrens)
        {
            List<UIElement> ordered = (from item in CurrentSelection
                                       orderby Canvas.GetZIndex(item as UIElement) ascending
                                       select item as UIElement).ToList();

            int count = childrens.Count;
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 =childrens.OfType<UIElement>().Where(item => Canvas.GetZIndex(item) == newIndex);
foreach (UIElement elm in it) { if (elm != ordered[i]) { Canvas.SetZIndex(elm, currentIndex); break; } } } } }

 置上一层:

  private void BringForward(List<UIElement> CurrentSelection ,UIElementCollection childrens)
        {
            List<UIElement> ordered = (from item in CurrentSelection
                                       orderby Canvas.GetZIndex(item as UIElement) descending
                                       select item as UIElement).ToList();

            int count = childrens.Count;
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; } } } } }

  

 

作者: e@Board 发表于 2011-08-31 10:59 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"