1
8
为了成为依赖属性,该属性实际上必须定义为 DependencyProperty 静态地,在类上。依赖属性系统与标准的clr属性非常不同。 但是,依赖属性的处理方式非常不同。类型定义依赖属性 静态地 ,并提供默认值。在需要实例之前,运行时实际上不会为其生成值。这提供了一个好处——在请求某个类型之前,该属性不存在,因此您可以拥有大量的属性而不需要开销。 这就是使样式工作属性的原因,但对于允许附加属性、通过可视化树的属性“继承”以及WPF所依赖的许多其他内容也很重要。
例如,以
|
2
27
下面是对依赖属性如何工作的解释,我一直希望有人能为我写。它是不完整的,很可能是错误的,但它将帮助您对它们进行足够的理解,以便您能够掌握所阅读的文档。
依赖属性是通过
下面是一个例子:
当你准备好
首先是什么。在上定义了静态属性
这个
当二传手为
无论如何,这个值现在被称为“局部值”,也就是说它是一个局部值
要点 全部的 这是:
什么东西?好吧,让我们看看一些用例。
结合。
绑定到属性时,它必须是依赖属性。这是因为
风格。
将对象的依赖属性设置为新值时,
动态资源。
如果你像这样写XAML
动画。
动画通过操纵属性值来工作。这些必须是依赖属性,因为动画正在调用
变更通知。
注册依赖属性时,还可以指定一个函数
价值继承。
注册依赖属性时,可以指定它参与属性值继承。当你打电话
你可以这样设置
|
3
9
理解依赖性属性试图解决的问题可能是有帮助的。 如果我们将绑定、动画和变更事件模型放在一边,正如在其他答案中讨论的那样,其好处是内存使用率,因此可以扩展到在一个窗口中承载数千个WPF对象。
如果一个窗口包含1000个
大多数应用程序只会更改一些属性,其中大部分属性将保留为默认值。基本上非常浪费和冗余的信息(每个对象在内存中只保存相同的默认值) 这就是依赖属性不同的地方。
没有私人支持字段。在注册依赖项属性时,可以指定默认值。所以在大多数情况下
当使用
因此,此存储方法将只为已从默认值更改的WPF对象的属性消耗内存。即仅与默认值的差异。 |
4
0
一个简单的/基本的区别-更改通知:对依赖项属性的更改会在更改时在UI中反映/刷新,而clr属性则不会。
以及后面的代码(声明clr和dependency属性):
依赖属性提供的另一个特性是值继承-顶级元素中的值集沿着元素树传播-以下示例取自 http://en.csharp-online.net “window”标记上声明的fontSize和fontStyle将应用于下面的所有子元素:
参考文献: http://www.codeproject.com/Articles/29054/WPF-Data-Binding-Part-1 http://en.csharp online.net/wpf_concepts%e2%80%94property_value_inheritance |
CasualNobody · 公开UserControls内容模板 6 年前 |
Tom · WPF中相同usercontrol的不同实例中的不同值 6 年前 |
Johannes · 从UserControl获取绑定列表 7 年前 |
Mike Eason · 在数据触发器中使用依赖属性 9 年前 |