zoukankan      html  css  js  c++  java
  • 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;
        }

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

      

  • 相关阅读:
    转: java语法与ide级入门介绍 from: IBM dev
    Java Servlet 技术简介 from:IBM Dev
    腾讯开源组件-毫秒服务引擎
    JS中的slice和splice
    validform校验框架不显示错误提示
    jQuery获取不到隐藏DIV的高度和宽度
    前端页面下载
    Java传统下载和SpringMVC下载
    先尽人事,再听天命
    Java生成PDF之iTextPDF的使用
  • 原文地址:https://www.cnblogs.com/socialdk/p/2893486.html
Copyright © 2011-2022 走看看