装饰器--

表示用于修饰 UIElement 的 FrameworkElement 的抽象类

简单来说就是,在不改变一个UIElement结构的情况下,将一个Visual对象加到它上面.

应用举例:

现在我们拥有一个文本框,但是我们需要限定输入的字符串,当输入的是非法字符串的时候,要求将文本框的四周包裹一个红色的边框.通常我们可以用Border将文本框包裹在里面,然后动态地改变它的颜色来实现功能.那么现在我们可以直接在文本框上面加一个装饰器来实现.

Adorner类

AdornerLayer类

装饰器是放在装饰层(AdornerLayer)里面的,这就意味着我们可以添加多个装饰器到UIElement上.通过AdornerLayer的静态方法GetAdornerLayer,我们可以很轻松的获取一个UIElement的装饰层.

接下来我们只要继承Adorner这个抽象类,来实现一个真实可用的装饰器,然后把装饰器加到控件的装饰层上面就可以了.

public class AdornerForTextBox : Adorner
{private VisualCollection visual;private Border border;public AdornerForTextBox(UIElement uiElement): base(uiElement){visual = new VisualCollection(this);#region 定义装饰器的样子border = new Border();border.BorderBrush = Brushes.Red;border.BorderThickness = new Thickness(1);border.Height = 20;border.Width = 80;#endregionvisual.Add(border);}protected override int VisualChildrenCount{get{return visual.Count;}}protected override Visual GetVisualChild(int index){return visual[index];}protected override Size MeasureOverride(Size constraint){return base.MeasureOverride(constraint);}protected override Size ArrangeOverride(Size finalSize){border.Arrange(new Rect(finalSize));border.Margin = new Thickness(0, 0, 0, 0);//绘制装饰器在元素上的最终位置return base.ArrangeOverride(finalSize);}}

显示装饰器

var adornerLayer = AdornerLayer.GetAdornerLayer(tb_Adorner);
if (adornerLayer != null)
{//清空原有的装饰器var adorners = adornerLayer.GetAdorners(tb_Adorner);if (adorners != null && adorners.Count() > 0){for (int i = 0; i < adorners.Count(); i++){adornerLayer.Remove(adorners[i]);}}adornerLayer.Add(new AdornerForTextBox(tb_Adorner));
}

效果图:

源代码下载:

http://files.cnblogs.com/youngytj/AdornerTest.rar

转载于:https://www.cnblogs.com/youngytj/p/4116127.html

WPF和Expression Blend开发实例:Adorner(装饰器)应用实例相关推荐

  1. python装饰器实例-python装饰器使用实例详解

    这篇文章主要介绍了python装饰器使用实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python装饰器的作用就是在不想改变原函数代码的情 ...

  2. python装饰器实例-Python装饰器用法实例总结

    本文实例讲述了Python装饰器用法.分享给大家供大家参考,具体如下: 一.装饰器是什么 python的装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能, ...

  3. Python函数篇(5)-装饰器及实例讲解

    1.装饰器的概念   装饰器本质上就是一个函数,主要是为其他的函数添加附加的功能,装饰器的原则有以下两个: 装饰器不能修改被修饰函数的源代码 装饰器不能修改被修改函数的调用方式   装饰器可以简单的理 ...

  4. python装饰器详解51-python装饰器使用实例详解

    这篇文章主要介绍了python装饰器使用实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python装饰器的作用就是在不想改变原函数代码的情 ...

  5. python装饰器详解-python装饰器使用实例详解

    这篇文章主要介绍了python装饰器使用实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python装饰器的作用就是在不想改变原函数代码的情 ...

  6. python装饰器实例-Python装饰器实用例子

    Python里我们经常能见到@开头的句法,也就是人们常说的装饰器(decorator).装饰器是Python非常重要的一部分,能够产出更易于维护的代码.这篇文章会给大家带来装饰器的介绍以及几个实用的例 ...

  7. python装饰器实例-python装饰器实例大详解

    原标题:python装饰器实例大详解 一.作用域 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我 ...

  8. python装饰器实例-Python装饰器原理与简单用法实例分析

    本文实例讲述了Python装饰器原理与简单用法.分享给大家供大家参考,具体如下: 今天整理装饰器,内嵌的装饰器.让装饰器带参数等多种形式,非常复杂,让人头疼不已.但是突然间发现了装饰器的奥秘,原来如此 ...

  9. python函数装饰器详解_Python语言函数装饰器用法实例详解

    这篇文章主要介绍了Python语言函数装饰器用法,以实例形式较为详细的分析了Python函数装饰器的常见使用技巧,需要的朋友可以参考下,希望对大家学习Python语言有所帮助. 本文实例讲述了pyth ...

最新文章

  1. mono上运行程序常见问题
  2. DotNetBar 中 SuperGridControl 加载数据、获取数据、设置样式
  3. GCC和MSVC的INITIALIZER的实现
  4. 批量删除redis键
  5. 分享人生第一个游戏源代码
  6. 长春理工计算机学院保研外校,长春理工大学计算机科学技术学院(专业学位)软件工程保研...
  7. 在两个有序的数组中找第N个数,二分查找 O(lgm+lgn)级
  8. Day05 egrep正则表达式sed
  9. usb 系统消息_小米USB3.0分线器发布:四口USB 3.0+USB-C
  10. 吴恩达神经网络和深度学习-学习笔记-38-使用开源的方案+迁移学习+数据增强data augmentation
  11. [转载] python flask实现分页
  12. ESXi主机性能问题
  13. python 链接spark_Spark大数据分布式处理实战:一文带你走进大数据世界
  14. 毕业设计论文选题系统系统用例图_基于UML的毕业设计管理系统的分析与设计
  15. 三分钟介绍什么是前端开发框架
  16. 001 红黑树(二)之 C语言的实现(3)
  17. Java面试官推荐的开发面试要点
  18. 直播预告更新 | 火爆全网的ChatGPT为什么这么强?
  19. 普通商品期货手机开户流程
  20. statgraphics画Multifactor ANOVA图

热门文章

  1. 如果你不够优秀,人脉是不值钱的
  2. 真正聪明的人必有的4个习惯
  3. 什么都懂, 为什么没有业绩?
  4. 如何建立自己的工作库,把分散信息有效整理?
  5. 苹果A13和A11性能差距有多大?
  6. 以太坊源码(03):POA委员会选举机制
  7. oracle12漏洞补丁下载,linux oracle 11g 漏洞补丁升级
  8. sql server 分区_使用分区归档SQL Server数据
  9. 查看表结构索引_索引策略–第1部分–选择正确的表结构
  10. SQL Server数据库迁移最佳实践,可降低风险和停机时间