WPF和Expression Blend开发实例:Adorner(装饰器)应用实例
装饰器--
表示用于修饰 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(装饰器)应用实例相关推荐
- python装饰器实例-python装饰器使用实例详解
这篇文章主要介绍了python装饰器使用实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python装饰器的作用就是在不想改变原函数代码的情 ...
- python装饰器实例-Python装饰器用法实例总结
本文实例讲述了Python装饰器用法.分享给大家供大家参考,具体如下: 一.装饰器是什么 python的装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能, ...
- Python函数篇(5)-装饰器及实例讲解
1.装饰器的概念 装饰器本质上就是一个函数,主要是为其他的函数添加附加的功能,装饰器的原则有以下两个: 装饰器不能修改被修饰函数的源代码 装饰器不能修改被修改函数的调用方式 装饰器可以简单的理 ...
- python装饰器详解51-python装饰器使用实例详解
这篇文章主要介绍了python装饰器使用实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python装饰器的作用就是在不想改变原函数代码的情 ...
- python装饰器详解-python装饰器使用实例详解
这篇文章主要介绍了python装饰器使用实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python装饰器的作用就是在不想改变原函数代码的情 ...
- python装饰器实例-Python装饰器实用例子
Python里我们经常能见到@开头的句法,也就是人们常说的装饰器(decorator).装饰器是Python非常重要的一部分,能够产出更易于维护的代码.这篇文章会给大家带来装饰器的介绍以及几个实用的例 ...
- python装饰器实例-python装饰器实例大详解
原标题:python装饰器实例大详解 一.作用域 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我 ...
- python装饰器实例-Python装饰器原理与简单用法实例分析
本文实例讲述了Python装饰器原理与简单用法.分享给大家供大家参考,具体如下: 今天整理装饰器,内嵌的装饰器.让装饰器带参数等多种形式,非常复杂,让人头疼不已.但是突然间发现了装饰器的奥秘,原来如此 ...
- python函数装饰器详解_Python语言函数装饰器用法实例详解
这篇文章主要介绍了Python语言函数装饰器用法,以实例形式较为详细的分析了Python函数装饰器的常见使用技巧,需要的朋友可以参考下,希望对大家学习Python语言有所帮助. 本文实例讲述了pyth ...
最新文章
- mono上运行程序常见问题
- DotNetBar 中 SuperGridControl 加载数据、获取数据、设置样式
- GCC和MSVC的INITIALIZER的实现
- 批量删除redis键
- 分享人生第一个游戏源代码
- 长春理工计算机学院保研外校,长春理工大学计算机科学技术学院(专业学位)软件工程保研...
- 在两个有序的数组中找第N个数,二分查找 O(lgm+lgn)级
- Day05 egrep正则表达式sed
- usb 系统消息_小米USB3.0分线器发布:四口USB 3.0+USB-C
- 吴恩达神经网络和深度学习-学习笔记-38-使用开源的方案+迁移学习+数据增强data augmentation
- [转载] python flask实现分页
- ESXi主机性能问题
- python 链接spark_Spark大数据分布式处理实战:一文带你走进大数据世界
- 毕业设计论文选题系统系统用例图_基于UML的毕业设计管理系统的分析与设计
- 三分钟介绍什么是前端开发框架
- 001 红黑树(二)之 C语言的实现(3)
- Java面试官推荐的开发面试要点
- 直播预告更新 | 火爆全网的ChatGPT为什么这么强?
- 普通商品期货手机开户流程
- statgraphics画Multifactor ANOVA图