学习WPF——初识依赖项属性

入门

首先创建一个依赖项属性

然后绑定父容器的DataContext到这个依赖项的实例

接着绑定子元素的属性到依赖项属性(注意Button的Content属性)

程序最终的运行结果:

说明


首先是定义表示属性的对象,一个依赖项属性的对象必然是DependencyProperty的实例

这个实例必须始终保持可用,所以这里定义为静态字段


根据约定,依赖项属性的字段名称使用Property结尾,上面例子使用的是NameProperty
依赖项属性实例的创建工作必须在使用之前完成,所以要么在定义的时候即完成实例化工作,要么在静态构造函数中完成这项工作

DependencyProperty没有公有的构造函数,必须使用DependencyProperty的Register函数来创建实例

依赖项属性实例创建出来之后,不允许修改,所以上面例子中NameProperty是只读的

最后一部是使用传统的.NET属性来封装WPF依赖项属性

不应该在.NET属性包装的时候添加验证属性值的代码、引发事件的代码

值继承

位于最顶端的元素,某一个属性设置了值,他的子元素也会继承这个属性的值

下面的例子中,我们设置Window元素的FontSize为30,这样Button的FontSize的属性值虽然没有设置

但他自动继承了Window的相关设置的值

(这非常像HTML中的样式设置)

如果我们不希望值继承的特性影响子元素的属性,那么只要给子元素相关属性设置你期望的值即可

但需要注意的是:

并不是所有的依赖项属性都有值继承的特性



总结

WPF中的依赖项属性和winform的属性起到的作用是一样的,但实现的机制却有着较大的区别

最主要的区别是WPF中的依赖项属性的值是存储在一个全局的哈希字典中的

这样做的好处是:


节约内存

winform中的90%的控件属性都存在默认值,为每个属性存储一个字段将是对内存的巨大浪费,依赖项属性系统仅存储改变过的值,对于默认值来说仅仅存储一次

值继承

当访问一个依赖属性的值时。如果当前没有值,则依赖属性会遍历整个逻辑树直至它找到一个值。

修改记录

2015-1-5:完成一部分内容

参考资料

《Pro WPF 4.5 in C# 4th Edition》

http://www.cnblogs.com/jimson/archive/2010/07/29/DependencyProperties.html

http://www.cnblogs.com/luluping/archive/2011/05/06/2039489.html

http://www.cnblogs.com/lxy131/archive/2010/08/04/1792301.html


时间: 2024-10-24 02:28:57

学习WPF——初识依赖项属性的相关文章

WPF的依赖项属性

WPF的依赖项属性 属性与事件是.NET抽象模型的核心部分.WPF使用了更高级的依赖项属性(Dependency Property)功能来替换原来.NET的属性,实现了更高效率的保存机制,还添加了附加功能,如属性变更通知以及强制回调.属性值继承(在逻辑树中向下传播默认属性值的能力)以及属性有效性验证等.同时,依赖项属性也是WPF许多重要功能的基础,包括动画.数据绑定以及样式. 依赖项属性的使用基础 使用依赖项属性包括三个部分,定义依赖项属性:注册依赖项属性以及添加属性包装器. 定义依赖项属性,使

【WPF学习】第十一章 理解依赖项属性

依赖项属性是标准.NET属性的全新实现——具有大量新增价值.在WPF的核心特性(如动画.数据绑定以及样式)中需要嵌入依赖项属性.WPF元素提供的大多数属性都是依赖项属性.到目前位置所见到的所有示例都用到了依赖项属性,但你可能还没有意识到这一点.这是因为依赖项属性的用法和普通属性的是相同的. 然而,依赖项属性并非普通属性.可能乐意认为依赖项属性是添加了一套WPF功能的常规属性(采用典型的.NET方式进行定义).从概念上讲,依赖项属性确实以这种方式工作,但它们的背后的实现方式并非如此.原因十分简单:

WPF学习系列之二 (依赖项属性)

依赖属性;(dependency property)  它是专门针对WPF创建的,但是WPF库中的依赖项属性都使用普通的.NET属性过程进行了包装.从而可能通过常规的方式使用它们,即使使用他们的代码不理解WPF依赖项属性系统也是如此,使用旧技术包装新技术看起来有些奇怪,但这正是WPF能够改变基础组成部分,而不会扰乱.NET领域中其他部分的原因.三步:一:定义依赖项属性.public static readonly DependencyProperty MarginProperty;二:.在静态构

WPF学习之依赖项属性

依赖项属性-依赖属性 Register(String, Type, Type) 使用指定的属性名称.属性类型和属性所在对象的类型.Register(String, Type, Type, PropertyMetadata) 使用指定的属性名称.属性类型.属性所在对象的类型和属性元数据注册依赖项属性.Register(String, Type, Type, PropertyMetadata, ValidateValueCallback) 使用指定的属性名称.属性类型.属性所在对象的类型.属性元数据

对WPF依赖项属性的理解

属性和事件是.NET抽象模型的核心部分, 而WPF中则用更高级的依赖项属性(Dependency Property)代替了原来.NET中的属性.依赖项属性主要应用于自定义元素中,用于为自定义元素注入自定义的属性. 以下是定义和注册依赖项属性的方法: //声明并注册依赖项属性 FoodProperty public static DependencyProperty FoodProperty =      DependencyProperty.Register("Food", typeo

WPF编程宝典之依赖项属性(八)

依赖项属性是专门针对WPF创建的,但WPF库中的依赖项属性都使用普通的.NET属性过程(property procedure)进行了封装. 1.定义依赖项属性 注:只能为依赖对象(继承自DependencyObject的类)添加依赖项属性.幸运的是,WPF基础结构的关键部分中的大部分都间接继承自DependencyObject类,最明显的例子就是元素. 依赖项属性需要在多个类之间共享信息,所以必须将DependencyProperty对象定义为与其相关联的类的静态字段.并且按照约定,依赖项属性的

WPF 依赖项属性

WPF中的依赖项属性 “依赖项属性的用途在于提供一种方法来基于其他输入的值计算属性值”,只有定义属性为依赖项属性,这个属性才支持样式设置,数据绑定,继承,动画和默认值. 属性对应的字段必需是公有,静态,只读的,类型为DependencyProperty.即public static readonly DependencyProperty 字段名,同时字段的命名也有规范,属性名+Property,字段在定义时,通过DependencyProperty.Register来实注册属性(只有注册了,才能

什么是依赖项属性?(在练习使用StoryBoard故事板时,遇到的问题)

概述: Windows Presentation Foundation (WPF) 提供了一组服务,这些服务可用于扩展公共语言运行时 (CLR) 属性的功能.这些服务通常统称为 WPF 属性系统.由 WPF 属性系统支持的属性称为依赖项属性. 依赖项属性提供用来扩展属性功能的功能, 最常用的莫过于"数据绑定"功能,依赖项属性可以通过数据绑定来引用值.数据绑定通过特定的标记扩展语法(在 XAML 中)或 Binding 对象(在代码中)来工作.使用数据绑定,最终属性值的确定将延迟到运行时

三,依赖项属性

定义依赖项属性 public class FrameworkElement : UIElement { public static readonly DependencyProperty MarginProperty; static FrameworkElement() { FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata(new Thickness(), FrameworkPropertyMetadataOpt