wpf 装饰类

可以通过装饰类给现有控件添加显示效果,如图给按钮添加四个角上的锚点

装饰类需要继承Adorner

 public class MoveRotateAdorner : Adorner
    {
        public MoveRotateAdorner(UIElement adornedElement) : base(adornedElement)
        {
        }

        //重写渲染
        protected override void OnRender(DrawingContext drawingContext)
        {
            //Rect adornedElementRect = new Rect(this.AdornedElement.DesiredSize);

            Rect adornedElementRect = new Rect(this.AdornedElement.RenderSize);

            // Some arbitrary drawing implements.
            SolidColorBrush renderBrush = new SolidColorBrush(Colors.Green);
            renderBrush.Opacity = 0.2;
            Pen renderPen = new Pen(new SolidColorBrush(Colors.Navy), 1.5);
            double renderRadius = 5.0;

            // Draw a circle at each corner.
            drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopLeft, renderRadius, renderRadius);
            drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopRight, renderRadius, renderRadius);
            drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomLeft, renderRadius, renderRadius);
            drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomRight, renderRadius, renderRadius);
        }
    }

//删除已有的装饰层
 public void ClearAdorner()
        {
            var layer = AdornerLayer.GetAdornerLayer(adornedElement);
            var arr = layer.GetAdorners(adornedElement);//获取该控件上所有装饰器,返回一个数组

            if (arr != null)
            {
                for (int i = arr.Length - 1; i >= 0; i--)
                {
                    layer.Remove(arr[i]);
                }
            }
        }

调用

//addAdorner为需要绑定装饰层的对象
var layer = AdornerLayer.GetAdornerLayer(addAdorner);
layer.Add(new MoveRotateAdorner(addAdorner));
posted @ 2021-06-25 17:34  Hey,Coder!  阅读(80)  评论(0)    收藏  举报