博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF Adorner学习(1)
阅读量:5840 次
发布时间:2019-06-18

本文共 4443 字,大约阅读时间需要 14 分钟。

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

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

  然后么自己先弄一个简单的关于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

你可能感兴趣的文章
杨辉三角绘图C语言
查看>>
SQL Server以Online模式创建索引
查看>>
微软开放 .NET 框架源代码
查看>>
Win2008 R2 VDI动手实验系列之五:配置远程桌面Web访问
查看>>
Jira迁移及内存调整
查看>>
Exchange Server 2010 SP2 新功能简述
查看>>
使用wxWidgets for C++从资源文件中静态装载图像
查看>>
提高数据库安全性的办法
查看>>
工作流编程循序渐进(8:状态机工作流)
查看>>
3.VMware View 4.6安装与部署-connection server(View Standard Server)
查看>>
Lync Server 2013 实战系列之六:标准版-安装和更新LyncServer 系统
查看>>
MariaDB日志审计 帮你揪出内个干坏事儿的小子
查看>>
Reporting Services目录临时数据库文件存在
查看>>
一个Windows Mobile, Windows Embedded CE工程师的找工经历(一)
查看>>
终于有了MSDN上的Blog
查看>>
PHPUnit学习03---使用Mock对象解决测试依赖
查看>>
java类型与Hadoop类型之间的转换
查看>>
允许SQL Server 2005远程连接
查看>>
微软为asp.net ajax和jquery创建了CDN
查看>>
Chris:怎样成为一名Android应用开发
查看>>