说到装饰,不由要说到女性。

  去年过年回家给我妈买了周大福项链,很明显就感觉待遇就不一样了,即使这样,还是被一个阿姨说应该买更重点的。看来钱这种东西果然是多一点才好。虽然自己无所谓,但让家里人更开心也是一种幸福啊。女朋友也很喜欢手链什么的,戴上手链气质的确会感觉挺不同的,我觉得这世界基本没有女生不喜欢身上装饰个神马的。

  装饰不是衣服,也不会影响自己本来的搭配,它是一种在原本基础上锦上添花却不会影响原本结构的东西。

  言归正传,假若你有个女朋友叫WPF,她有自己喜欢的搭配,当你追到她的时候她已经搭配好自己了,怎样才能在不改变她的同时加深下她的气质呢,那就需要钻石,项链。。Adorner。很突兀对么。其实Adorner和装饰物性质一样,需要一些努力(用时间来学习=金钱)之后就能取悦自己的女朋友了。

  当你需要一个悬浮物不影响自己本来UI的建设,当你需要一个可以跟随你一个控件点击产生的跟随UI(比如点击一个按钮就在旁边出现一个小框,盖住之前UI的那种),当你需要一个可以定义为装饰而不是骨架的话,那就请使用装饰者模式。装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。关于它的定义这里我就不概述了。链接直接给上http://baike.baidu.com/link?url=_c_YDD4bZSkpem21xAz6qTwU2HYHLxF2PBWFKQx7oGCIPnx2DUzq-KIU8Ni3h2alqYsZN8VY6pGDZkOZi84rZK

  而在WPF中,最常用到的便是Adorner了。

  在这里我便不赘述如何使用了,我会在最后给上链接,毕竟很多人写过,我希望我能做到的是能够把这个理念叙述清楚,而并不只是贴代码,授人以鱼不如授人以理念。

  Adorner机制我觉得比较相似于上海晾衣服。上海是个很奇葩的城市,尤其是晾衣服。都是那种一根棍子串很多搭在外面架子上,我住在四楼,每次都战战兢兢。其实Adorner也类似,要晒的衣物便是Adorner里装的元素,衣服那根棍子是AdornerLayer,架子则是AdornerDecorator。

  自己写好的元素装进Adorner里,用AdornerLayer串好,搭在AdornerDecorator的架子上。便是整个Adorner的实现。

  自己感觉这里就结束还蛮突兀的,但实际上也就是那么简单。解耦和,分成各个功能模块,然后再组合在一起工作,这种方式着实令人着迷,也非常容易理解。

  具体的使用方法和解释下面我就贴上来吧,站在巨人肩膀上才能更伟大,谢谢软件这个行业善于分享带来的世界的善意。

  概念:http://www.cnblogs.com/loveis715/archive/2012/03/31/2427734.html

  结构图:http://www.cnblogs.com/lusonixs/articles/1588859.html

  CodeProject精品例子:http://www.codeproject.com/Articles/54472/Defining-WPF-Adorners-in-XAML

             http://www.codeproject.com/Articles/709266/Design-Adorners-in-XAML-with-Data-Binding-Support

               http://www.codeproject.com/Articles/72544/Editable-Text-Block-in-WPF

  

女生的最爱,装饰品。WPF也有,Adorner。(上海晒衣服理念)的更多相关文章

  1. WPFのDecorator 、Adorner和AdornerDecorator

    Decorator 和 Adorner 它们都有“装饰品”的意思. Decorator类负责包装某个UI元素,以提供额外的行为.它有一个类型为UIElement的Child属性,其中含有待包装的内容. ...

  2. WPF Adorner

    之前做项目时,为了实现类似微信消息数目的效果   image.png ,我之前是修改的ControlTemplate.类似于将一个带数字的控件,放在另一个控件的右上角,来实现的这个效果. 原来WPF有 ...

  3. WPF中的数据驱动

    在WPF出现之前,Win Form,ASP.NET等技术均采用“事件驱动”理念,这种由“事件-订阅-事件处理器”关系交织在一起构成的程序,景观可以使用MVC.MVP等设计模式,但一不小心就会使界面逻辑 ...

  4. [WPF]WPF开发方法论

    纵观Windows GUI应用程序开发方法,从Windows API.MFC到Visual Basic再到.NET Framework,WPF的开发方法论是在.NET Framework方法论的基础上 ...

  5. 图文列表,关于Simpleadapter

    main.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xm ...

  6. emouse思·睿—评论与观点整理之二

    虽说我主要做的硬件,平时的兴趣爱好比较关注移动互联网,混迹于虎嗅.爱范儿.雷锋网.36Kr.cnBeta.瘾科技.i黑马.TechWeb等这类科技以及创业媒体,遗憾的是系统的去写的并不多,好在还算充分 ...

  7. sell01 环境搭建、编写持久层并进行测试

    1 环境配置 JDK 1.8 MAVEN 3.5 MYSQL 5.7 VirtualBox 5.1 2 搭建MYSQL环境 下载 VM 和 虚拟镜像文件 虚拟镜像文件:点击前往 技巧01:安装完vir ...

  8. MySQL数据类型——数值类型

    1.1.1 整型 整型 占用字节 范围 范围 tinyint 1 -27~27-1 -128~127 smallint 2 -215~215-1 -32768~32767 mediumint 3 -2 ...

  9. 淘宝杨志丰:OceanBase--淘宝结构化大数据解决之道

    时至今日,“Big data”(大数据)时代的来临已经毋庸置疑,尤其是在电信.金融等行业,几乎已经到了“数据就是业务本身”的地步.这种趋势已经让很多相信数据之力量的企业做出改变.恰逢此时,为了让更多的 ...

随机推荐

  1. eclipse控制台乱码

  2. ZooKeeper之FastLeaderElection算法详解

    当我们把zookeeper服务启动时,首先需要做的一件事就是leader选举,zookeeper中leader选举的算法有3种,包括LeaderElection算法.AuthFastLeaderEle ...

  3. SVN基本指令

    Svn使用: Versions: Cornerstone: 如果命令行不出来,可以设置commonsline Tools 命令行:svn heip 获取服务器端数据 svn checkout 远端ur ...

  4. css定位学习经验记录

    之前了解到css的定位position属性,常用的三种: position:absolute 1.当父元素定位为relative时,以父元素为起始坐标定位. 2.当父元素没有定位时,以body为起始坐 ...

  5. mybatis配置文件的bug

    看看图片里的配置有什么问题么? url=jdbc--我擦,我怎么这么不小心,换来一整天的不得安宁,上网各种搜bug,把mysql驱动配置到classpath中,jar包放进jdkjre里面还是不行妈的 ...

  6. JQuery基本知识框架思维导图(上)

    一:认识jQuery 1.window.onload与$(document).ready()的对比 2.jQuery代码风格(1:链式代码风格2:位代码添加注释) 3.jQuery对象和DOM对象(1 ...

  7. 浅谈我对 jQuery 的了解

    总述 0 获取 jQuery 对象 1 对象跳转 2 方法调用 3 常用API 4 $(…); 5 jQuery 对象获取 6 Data 相关方法 7 选择器 8 基本的过滤器 9 内容过滤选择器 1 ...

  8. ubuntu下安装了express2.5.8,如何更新它?

    在ubuntu上通过apt-get install node-express,结果发现它的版本是2.5.8. 想安装express4.0+的版本,一直不能正确安装,所以一时兴起,打算先删掉它,再重新安 ...

  9. webview使用技巧汇总

    1.webview去除原网址的广告或者标题 js语句 document.documentElement.getElementsByClassName('这里写你要消除的空间的class里面的字符串') ...

  10. 自定义委托类型 - .Net自带委托类型

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递. 与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用. 一.自定义委托类型 1.语法结构:访问修 ...