wpf是什么(微软WPF是什么)
【了解属性和字段】
我们知道,属性是面向对象语言中用来封装字段的外衣,它像是字段对外界的桥梁,我们可以通过属性来验证数据的合法性或控制对外的访问性等等。每个属性的背后都有其对应的一个字段做支撑,就算是自动属性,在编译时系统也会创建其字段,只不过自动属性是微软给我们的语法糖罢了。在C#中,属性最后是会编译成两个方法:get_属性名和set_属性名(如果是只读属性,则没有set方法,反之没有get方法)。
编译成方法,属性就不会占用太多空间,因为方法存在于内存公共的方法区,每个实例的创建不过是多一个指向该方法的指针。但是字段不一样,每个实例创建的创建,都会在内存中开辟对应的空间来存放字段,一个类中的字段越多,它在内存中占用的空间就越大,理解了这个理论,下面我们来正式说明什么是依赖属性,为什么要有依赖属性。
【什么是依赖属性】
我们使用一个控件,可以看到这个控件有很多的属性,有属性就有字段的内存开销,但实际上对于一个控件,我们大多数只会使用其部分常用属性,比如Button我们最常使用Content,Height等属性,那些不经常使用的属性相当于白白占用着内存。当我们写一个复杂的XAML页面,涉及到很多控件的使用时,这种浪费内存的现象就很严重。
对此,微软在WPF中引入了依赖属性(Dependency Property),依赖属性允许没有自己的字段,可以通过Binding绑定到其它对象的属性或者说数据源上,从而获得值,这种依赖在其它对象上的属性,就是依赖属性,当明确了它的功能,我想大家就不会对依赖二字产生疑惑了,依赖属性没有自己的字段,只在使用时通过Binding从别的对象身上获取,给自己临时创建内存空间,这样不使用就不会有多余内存消耗。
包含依赖属性的对象称为依赖对象(Dependency Object),这种对象需要继承DependencyObject这个基类,实际上,WPF中的控件,都继承了DependencyObject这个类,控件中的大部分属性都是依赖属性,这样我们才能通过Binding去绑定值(不熟悉Binding的同学可以参见前文Binding(一):数据绑定系列),才不会有内存浪费现象的发生。
【从代码中学习依赖属性】
下面我们通过代码来学习一下如何声明并使用依赖属性,请先看我写好的一段代码:public class Pikachu : DependencyObject { public static readonly DependencyProperty PikachuNameProperty = DependencyProperty.Register("PikachuName",typeof(string),typeof(Pikachu)); }
上文说到,使用依赖属性必须要继承DependencyObject类,另外,声明
依赖属性,需要使用public static readonly三个修饰符修饰,实例依赖属性也不是通过new操作符,而是通过DependencyProperty的Register方法来获取。
依赖对象的名字,有个约定,就是以Property为后缀,在C#中有很多命名约定,比如接口用I做前缀,特性用Attribute做后缀等等,这样做都是为了有个良好的命名规范,做到见名知意。
Register方法有三个重载,此处用的是其三个参数的重载,它还有四个参数和五个参数的重载。第一参数是指定依赖属性的包装器名称是什么(包装器就是用来包装依赖属性的,通过一个属性来包装依赖属性供外部使用,具体下文会讲,此处先做了解)第二个参数是指定依赖属性要存储的值的类型是什么第三个参数是指定依赖属性属于哪个类的,或者说是为哪个类定义依赖属性其它重载中第四个参数是指定依赖属性的源数据,用于提供给调用者此依赖属性的信息其它重载中第五个参数是自定义的依赖属性生成时的验证回调
声明了依赖属性,但是如何给依赖属性赋值呢,这就要用到DependencyObject基类中的方法了,我们使用其中的SetValue方法和GetValue方法来操作依赖属性的值,请看下面改动后的代码:public class Pikachu : DependencyObject { public string PikachuName { get =
哪个牌子的玉好(有名的玉器店铺有哪些)在许多玩玉人的心里都有一个玉牌情结,因为玉牌不仅寓意好,形制也很多样,而玉牌中最受欢迎的就是无事牌了。平安无事牌也被称为子冈牌,因为牌面没有纹饰,所以叫无事,寓意着平安无事,万事顺
日本化妆品怎么样(日本化妆品品牌前十名)作者李小歪编辑喵子米早年已经成熟的日本美妆市场虽竞争激烈,但彩妆市场近十年来格局异常稳定。2006年KAO花王收购KANEBO嘉娜宝之后,四大美妆集团资生堂Shiseido花王Ka
韩国化妆品哪个牌子好(韩国化妆品牌前十名)英国品牌评估机构品牌金融(BrandFinance)发布2020年韩企品牌价值评测结果(SouthKorea502020),三星电子仍然独居榜首,品牌价值远远超出其他品牌。50个品
哪个牌子的水好(化妆水排名前十名的品牌)化妆水是日常保养中最基础的程序之一,也算是所有女性这一生保养之路的生命之水!那么又有哪些是值得我们一生回购的好用化妆水呢。今天就来说说化妆水里面最火的那几瓶!希思黎花香润肤水粉粉嫩
今日山东费县生猪价格(山东费县惨案)年8月18日山东鸡蛋价格行情文章来源禽病网作者佚名更新时间年8月18日山东地区鸡蛋价格行情较昨日大体趋势稳定HmX中国饲料行业信息网立足饲料?四川省昭化区猪白条肉200,年山东13
为什么要赚钱(女人必须努力赚钱的9个理由)都说做人难,做男人更难,但是我想说做女人才是更难。这个社会对女人的要求太多,生活也不会因为你是女孩子就对你怜香惜玉,既要上得厅堂,下得厨房,还要貌美如花,赚钱养家,工作和家庭两边兼
小学转学需要哪些手续(小学生跨省转学需要什么手续)近日,有网友留言咨询我家的孩子现在在黑龙江上小学5年级,由于我们夫妻两人在烟台工作,想放暑假前给孩子办理转学,转到莱山区这边来上小学。黑龙江的课程跟烟台的不太一样,所以想让孩子来上
华为云怎么样(能同步的网盘哪个好用)前言最近阿里发布了阿里云盘内测版,和其他网盘相比,阿里云盘以简洁的UI界面设计,以及上传下载不限制速度等迅速重新掀起了云盘的讨论热潮。自从各大云盘停止运营以后,阿里云盘的横空出世,
手机怎么操作才能不被定位(免费查找对方手机位置)手机怎么操作才能不被定位(免费查找对方手机位置)现在的社会,手机现已成为了万众随身的一种设备,它可以上网和联络朋友,可以作为人们的掌上电脑。现在的手机大多数都是智能化的,可以和电脑
手机怎样查定位(定位对方手机位置怎么弄)手机怎样查定位(定位对方手机位置怎么弄)现在的社会,手机现已成为了万众随身的一种设备,它能够上网和联络朋友,能够作为人们的掌上电脑。现在的手机大多数都是智能化的,能够和电脑比美,能
小米手机怎样查手机定位(定位对方手机位置怎么弄)小米手机怎样查手机定位(定位对方手机位置怎么弄)现在的社会,手机现已成为了万众随身的一种设备,它可以上网和联络朋友,可以作为人们的掌上电脑。现在的手机大多数都是智能化的,可以和电脑