WPF Adorner学习(1)

  WPF中的Adorner是一个挺有用的东西,表示刚刚学的话还是需要看一会的=-= 先学习下最简单的基础应用先,然后再继续往下挖掘。

  首先,还是了解下Adorner是撒,由于本人比较菜,还是找个地方看一下比较好。先弄个连接放在以后慢慢翻一翻。考资料:WPF - Adorner    &&   Adorner in WPF

  然后么自己先弄一个简单的关于Adorner的东西,先把那个简单的比如把一个label的四个角都加一个圆圈。就是先弄一个label,然后用AdornerLayer.GetAdornerLayer()方法把label传进去,再用AdornerLayer.Add()把Adorner加进去。

View Code
private void Window_Loaded_1(object sender, RoutedEventArgs e) {
            AdornerLayer adorner = AdornerLayer.GetAdornerLayer(label);
            adorner.Add(new SimpleTestAdorner(label));
        }

  随后只要重写OnRander就可以了,在里面加上四个角:

View Code
protected override void OnRender(System.Windows.Media.DrawingContext drawingContext) {
            Rect adornedElementRect = new Rect(this.AdornedElement.DesiredSize);

            SolidColorBrush renderBrush = new SolidColorBrush(Colors.Green);
            renderBrush.Opacity = 0.2;
            Pen renderPen = new Pen(new SolidColorBrush(Colors.Red), 1.5);
            double renderRadius = 5.0;


            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);

            Rect rect = new Rect(0, 0, adornedElement.ActualWidth, adornedElement.ActualHeight);
            Pen rectrenderPen = new Pen(new SolidColorBrush(Colors.Blue), 1.5);

            drawingContext.DrawRectangle(Brushes.Transparent, rectrenderPen, rect);
            base.OnRender(drawingContext);
        }

  这样的话好像比较低端一点,好像都是在一层上面的,貌似还需要从外面加东西进去,如果先在里面画一个矩形,然后可以再用AddVisualChild来添加一些东西进去,如下:

View Code
class SimpleTestAdorner : Adorner {
        public SimpleTestAdorner(UIElement andornerElement)
            : base(andornerElement) {
            if (andornerElement is FrameworkElement) {
                adornedElement = andornerElement as FrameworkElement;
                CreateEllipse();
            }
        }

        private void CreateEllipse() {
            Ellipse ellipse = new Ellipse();
            ellipse.Stroke = Brushes.Red;
            ellipse.Fill = Brushes.Green;
            ellipse.Cursor = Cursors.SizeNWSE;

            AddVisualChild(ellipse);
            ellipseDrag = ellipse;
        }

        protected override int VisualChildrenCount {
            get {
                return 1;
            }
        }

        protected override Visual GetVisualChild(int index) {
            if (adornedElement != null)
                return ellipseDrag;
            return base.GetVisualChild(index);
        }

            
        protected override Size ArrangeOverride(Size finalSize) {
            Size size = base.ArrangeOverride(finalSize);
            if (VisualChildrenCount == 1) {
                ellipseDrag.Arrange(new Rect(finalSize.Width - 205, finalSize.Height - 105, 10, 10));
            }
            return size;
        }

        protected override void OnRender(System.Windows.Media.DrawingContext drawingContext) {
            //Rect adornedElementRect = new Rect(this.AdornedElement.DesiredSize);

            //SolidColorBrush renderBrush = new SolidColorBrush(Colors.Green);
            //renderBrush.Opacity = 0.2;
            //Pen renderPen = new Pen(new SolidColorBrush(Colors.Red), 1.5);
            //double renderRadius = 5.0;


            //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);

            Rect rect = new Rect(0, 0, adornedElement.ActualWidth, adornedElement.ActualHeight);
            Pen rectrenderPen = new Pen(new SolidColorBrush(Colors.Blue), 1.5);

            drawingContext.DrawRectangle(Brushes.Transparent, rectrenderPen, rect);
            base.OnRender(drawingContext);
        }

        Ellipse ellipseDrag = null;
        FrameworkElement adornedElement = null;
    }

  然后就可以通过这个圈来放大缩小,当然我还没写= = 容我再多学习一下~

  

转载于:https://www.cnblogs.com/socialdk/archive/2013/02/05/2893486.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值