当前位置:首页 > Windows程序 > 正文

WPF基础学习笔记(一)Dependency Object 和 Dependency Property

2021-03-29 Windows程序

。依赖属性是WPF个人觉得对精彩和最有特色的部分。所以特地先拿出来。

首先要实现Dependency Property 则必须要继承Dependency Object。如果看下WPF的基础控件其实都间接或者直接继承Dependency Object,这点规律性我在后面再做规律陈述。

首先Dependency Object 我搬下书的描述

Only the thread that the Dispatcher was created on may access the DispatcherObject directly. To access a DispatcherObject from a thread other than the thread the DispatcherObject was created on, call Invoke or BeginInvoke on the Dispatcher the DispatcherObject is associated with.

这点完全契合WPF的线程模型。首先DO是和线程相关,只有创建线程可以访问DO。这就是为什么在WPF我们自己创建的线程想要改变UI元素,则必须Dispatcher.Invoke和BeginInvoke了。

DP的特色和知识点信息量巨大。作为一个学习笔记,我只列出精华内容。

1 继承性

这点和WPF的视觉树契合

2 内存节约性

通过默认值,可以大大节约值的设置

3 多值存储性(优先级性)

public enum BaseValueSource {   Unknown = 0,   Default = 1,   Inherited = 2,   DefaultStyle = 3,   DefaultStyleTrigger = 4,   Style = 5,   TemplateTrigger = 6,   StyleTrigger = 7,   ImplicitStyleReference = 8,   ParentTemplate = 9,   ParentTemplateTrigger = 10,   Local = 11, }
这个优先级可以回答大多数更新值没有起作用的疑问了。

5 PropertyChangedCallback
值变更回调。
这里特别提醒注意的是,是所有DP值赋值都会走set属性这条路,如果是通过Express来Binding或者直接Xmal赋值,WPF会自己去走一条“偷偷摸摸”的捷径,关于这点几乎所有的WPF新手都会中招,祝大家踩吭愉快。

好了,说到最后,个人认为DO,DP体现是WPF专门针对UI来设计的。对于需要自定义用户控件特别需要加深理解。

同时,DP和DO对于Binding也是一衣带水的,简而言之,DP是Binding的“左值” ,而DataContext是Binding的“右值”
世事无绝对,当然DO也能当“右值”使用,但是这个是个人喜好,,我一家之言认为DO作为右值有点“太重”。由内而外的理解有助于WPF的学习。


DO和DP的学习资料

一站式WPF--依赖属性(DependencyProperty)一
一站式WPF--依赖属性(DependencyProperty)二

WPF基础到企业应用系列7——深入剖析依赖属性

WPF基础学习笔记(一)Dependency Object 和 Dependency Property

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/69548.html