深入剖析依赖属性(WPF/Silverlight核心)(上)

一. 摘要

前几篇我们讲了WPF的一些基本知识,但是始终没有接触最核心的概念,那么从这篇文章开始的下面几篇文 章中,我们会分别深入讨论一下依赖属性、路由事件、命令和绑定等相关概念,希望这几篇文章对大家能有所 帮助。由于自己才疏学浅且是对这些技术的使用总结和心得体会,错误之处在所难免,怀着技术交流的心态, 在这里发表出来,所以也希望大家能够多多指点,这样在使一部分人受益的同时也能纠正我的错误观点,以便 和各位共同提高。

二. 本文提纲

· 1.摘要

· 2.本文提纲

· 3.比这篇文章更重要的东西

· 4.云计算广告插播

· 5.依赖属性基本介绍

· 6.依赖属性的优先级

· 7.依赖属性的继承

· 8.只读依赖属性

· 9.附加属性

· 10.清除本地值

· 11.依赖属性元数据

· 12.依赖属性回调、验证及强制值

· 13.依赖属性监听

· 14.代码段(自动生成)

· 15.模拟依赖属性实现

· 16.本文总结

· 17.相关代码下载

· 18.系列进度

三. 比这篇文章更重要的东西

在讲这篇文章之前,我们先来聊一点更重要的东西,正所谓“授人与鱼不如授人以渔”,那么我们这个“ 渔”究竟是什么呢?大家做软件也有不少年了,对自己擅长的一门或多门技术都有自己的经验和心得,但总的 来说可以分为向内和向外以及扩展三个方面(这里只针对.NET平台):

(一)向外:

会使用ASP.NET、WinForm、ASP.NET MVC、WPF、Silverlight、WF、WCF等技术,在用这些技术做项目的同 时积累了较丰富的经验,那么大家就可以形成自己的一套开发知识库,知道这些技术怎么能快速搭建企业所需 要的应用、知道这些技术在使用中会出现什么样的问题以及如何解决。那么在这个时候你就可能已经在团队中 起到比较核心的作用,如果项目经理给你一个任务,你也可以很轻松且高效的胜任,同时在项目当中由于你也 比较清楚业务逻辑,所以当机会来临的时候,你很快会成为团队的骨干,逐渐你就会带几个初级一点的工程师 一起做项目;如果你不喜欢带团队,你就会成为资深的高级开发或者架构师。那么在向外方面我个人认为最重 要的是积累经验,对常见的应用要比较熟悉且有自己总结的一套开发库——比如对普通的网站、电子商务系统 、ERP、OA、客户端应用等等有比较丰富的经验。

(二)向内:

在前面你使用了这些技术开发项目之后,你会遇到很多问题,为了解决这些问题,你会逐渐研究一些比较 底层次的东西。比如对于ASP.NET,你会逐渐的去深入理解ASP.NET的整个处理过程、页面的生命周期、自定义 控件的开发等等,由于自己最初是由C、C++、Java这样过渡到.NET的,所以对一些细节总喜欢钻牛角尖,这也 浪费了不少时间,但同时也得到了很多意外之喜。

对于C#语言上,你也会逐渐去刨根问底,想看看这些语法糖背后到底隐藏着什么秘密,很多对.NET技术比 较痴迷的人都会选择对C# 1.0 语言通过IL代码来深层次认识,然后对C#2.0、C#3.0、C#4.0都编译为C# 1.0 来学习,这样他们就能认识到语言的内部到底是怎么执行的,正所谓知道的同时也知道其所以然。

对于WF,你不仅要知道各 Activity的使用,你也得知道其内部的原理,比如WF 内部就是依靠依赖属性来 在工作流中的各 Activity 间传递属性值的,如果你细心,你还原WF的依赖属性源码,你会发现它和WPF、 Silverlight中的依赖属性大同小异,原理基本一样、只是针对特定技术进行了适当的调整。

对于数据底层操作也一样,不管你是用的拼接SQL、存储过程、IBATIS.NET、Nhibernate,Active Record ,Linq to sql、Entity framework还是自己开发的ORM组件,你得明白它内部的原理,你要知道这些开源的代 码还是很值得研究的,我的经验是先熟练使用这些功能,然后再剖析它的源码,然后自己写一套自己的框架, 现在我也在精简自己的ORM框架,因为之前把重点放在了实现尽可能多的功能,所以对性能等细节没有做过多 优化,后面也会向大家慢慢学习。

对WPF和Silverlight一样,你不仅要知道怎么用这些技术,你要知道它的原理,比如对依赖属性,你知道 它的内部原理,就可以对平时出现的诸如我设置的值怎么没有起作用、我Binding的元素怎么没有出现等等问 题; 对路由事件,你也会经常遇到我的事件怎么没有执行、我的自定义控件事件怎么处理不对、路由传递怎 么没有起作用等等,这个时候你如果深入理解了路由事件的内部处理,这些问题就迎刃而解了;对WPF和 Silverlight新多出来的命令特性,大家很多时候也是比较疑惑,也会遇到命令失效等等问题,其实如果你深 入的了解了它的原理,你就会知道,它其实在内部也是事件,只不过微软在里面做了很多封装而已;对 Binding就更是如此,我们也不想在这篇文章谈开去,毕竟在下面的几篇文章会详细的对这些技术进行涉及。

时间: 2024-12-06 11:11:36

深入剖析依赖属性(WPF/Silverlight核心)(上)的相关文章

WPF基础到企业应用系列7深入剖析依赖属性(WPF/Silverlight核心)

一. 摘要 首先圣殿骑士很高兴这个系列能得到大家的关注和支持,这个系列从七月份开始到现在才第七篇,上一篇发布是在8月2日,掐指一算有二十多天没有继续更新了,最主要原因一来是想把它写好,二来是因为最近几个月在筹备"云计算之旅"系列,所以一再推迟了发布进度.之前一直都没有想过要录制视频,主要的原因还是怕自己知识有限,从而误导他人,所以前几次浪曦和51CTO邀请录制视频,我都以工作忙.公司内部培训需要时间和自己有待提高等理由委婉的拒绝了,说实在的,自己也知道自己还有很多地方有待提高,还需要向

深入剖析依赖属性(WPF/Silverlight核心)(下)

十一. 依赖属性元数据 前面我们看到一个依赖属性的注册最全的形式是下面这样子的: public static DependencyProperty Register(string name, Type propertyType, Type ownerType, PropertyMetadata typeMetadata, ValidateValueCallback validateValueCallback); 第一个参数是该依赖属性的名字,第二个参数是依赖属性的类型,第三个参数是该依赖属性的所

WPF学习之依赖属性和附加属性

依赖属性(Dependency Property) .NET Framework 3.0引入了一个新的属性类型叫依赖属性, WPF,WF都在使用依赖属性用来实现样式化,数据绑定等.我们更多的使用依赖属性是为了让父元素的属性值在逻辑树上慢慢的传递到其子元素中,从而可以在整个可是父元素的逻辑子元素中共享属性值.WF就是依靠依赖属性来在工作流中的各Activity间传递属性值的. 所以,依赖属性内建的传递变更通知的能力是其最大特征. 如果你想让属性在一个包含内容子控件树的整个逻辑控件树中都有效并共享值

依赖属性之“风云再起”

一. 摘要 首先圣殿骑士很高兴"WPF 基础到企业应用系列" 能得到大家的关注.支持和认可.看到很多朋友留言希望加快速度的问题,我会尽力的,对你们的热情关注也表示由衷的感谢.这段时间更新慢的主要原因是因为忙着用TDD还原MONO的框架,同时也因为一直在研究云计算,所以就拖拖拉拉一直没有发布后面的文章.由于WPF整个系列是自己的一些粗浅心得和微薄经验,所以不会像写书那么面面俱到,如果有不足或者错误之处也请大家见谅.在今年之内圣殿骑士会尽量完成"WPF 基础到企业应用系列&quo

一起谈.NET技术,WPF/Silverlight深度解决方案:目录

介于目前WPF/Silverlight技术资料在国内相当稀缺,仅有的也是一些很基础的教程.为了更深度的剖析WPF/Silverlight的技术内涵,解决开发过程中的疑难杂症,分解实际应用案例的特色细节,"WPF/Silverlight深度解决方案"系列由此孕育而生.整个系列的所有文章均为原创,由本人的个人开发经验结合相关资料编写而成,过程中难免有错漏或不妥当的地方还望各位读者友善的指出.我们的目标只有一个:WPF/Silverlight技术深度挖掘.如果您有符合本系列主题的内容想要与大

WPF/Silverlight深度解决方案:目录

介于目前WPF/Silverlight技术资料在国内相当稀缺,仅有的也是一些很基础的教程.为了更深度的剖析WPF/Silverlight的技术内涵,解决开发过程中的疑难杂症,分解实际应用案例的特色细节,"WPF/Silverlight深度解决方案"系列由此孕育而生.整个系列的所有文章均为原创,由本人的个人开发经验结合相关资料编写而成,过程中难免有错漏或不妥当的地方还望各位读者友善的指出.我们的目标只有一个:WPF/Silverlight技术深度挖掘.如果您有符合本系列主题的内容想要与大

明晰Silverlight中的依赖属性

在c#中--得益于c#3.0中的自动属性--我们可以十分轻松的通过如下代码创建一个叫做 "AuthorName"的属性. public string AuthorName { get; set; } 上面的代码就是我们熟悉的CLR属性,我们可以很方便的读/取这个属性的值.不过在 silverlight的世界中如果你想做更多更牛的事情,CLR属性就显得有些力不从心了.它们包 括--动画.数据绑定.样式/模板等等. 因此,微软在WPF中提出了依赖属性(Dependency Property

Silverlight:Dependency Property(依赖属性)学习笔记

1.定义依赖属性:           #region Text        public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(ImageButton), new PropertyMetadata(default(string), new PropertyChangedCallback(TextPrope

Silverlight的依赖属性与附加属性

好久没写Silverlight了,依赖属性(Dependency Property)和附加属性 (Attached Property)这两个算是很基础的知识都不是很记得了.写一写,当做 一下笔记吧. CLR属性 与 依赖属性 CLR属性我们非常熟悉了,在DotNet编程中随处可见.最简单最常见的属性访 问器就是直接操纵类的私有成员,如下: public class Person { private String _name; public string Name { get { return _