Beispiel #1
0
        //public static int GetAdornerIndex(this Adorner adorner)
        //{
        //    return (int)adorner.GetValue(AdornerIndexProperty);
        //}

        public static void AddAdorner(this FrameworkElement element, Adorner adorner, int depth = 1, int zindex = -1)
        {
            var items = element.GetAdorners();

            if (items == null)
            {
                items = new List <AdornerData>();
                element.SetValue(AdornersProperty, items);
            }

            if (items.Count(item => item.Adorner == adorner) == 0)
            {
                var data = new AdornerData()
                {
                    Adorner = adorner,
                    Depth   = depth,
                    ZIndex  = zindex
                };

                adorner.SetAdornerData(data);

                items.Add(data);

                ApplyAdorner(element, data);
            }
        }
Beispiel #2
0
        private static void SetLayerZOrder(Adorner adorner, int index)
        {
            AdornerData data = adorner.GetAdornerData();

            if (data.ParentLayer != null && data.ParentLayer.Equals(adorner.Parent))
            {
                setZOrderMethodInfo.Invoke(data.ParentLayer, new object[] { adorner, index });
            }
        }
Beispiel #3
0
        public static void SetAdornerIndex(this Adorner adorner, int index)
        {
            AdornerData data = adorner.GetAdornerData();

            if (data != null && data.ParentLayer != null)
            {
                data.ZIndex = index;
                SetLayerZOrder(adorner, index);
            }
        }
Beispiel #4
0
        private static void ApplyAdorner(FrameworkElement element, AdornerData data)
        {
            if (element.IsLoaded && element.IsVisible)
            {
                ApplyAdornerCore(element, data);
            }
            else
            {
                if (!pendingElements.Contains(element))
                {
                    pendingElements.Add(element);

                    element.Loaded += Element_Loaded;
                }
            }
        }
Beispiel #5
0
        private static void ApplyAdornerCore(FrameworkElement element, AdornerData data)
        {
            AdornerLayer layer = GetAdornerLayer(element, data.Depth);

            if (layer == null)
            {
                return;
            }

            data.ParentLayer = layer;

            layer.Add(data.Adorner);

            int index = data.ZIndex;

            if (index < 0)
            {
                index = 0;
            }

            //SetLayerZOrder(data.Adorner, data.Adorner.GetAdornerIndex());
            SetLayerZOrder(data.Adorner, index);
        }
Beispiel #6
0
 private static void SetAdornerData(this Adorner adorner, AdornerData data)
 {
     adorner.SetValue(AdornerDataProperty, data);
 }