码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2015-07-20 01:14:47      阅读:660      评论:0      收藏:0      [点我收藏+]

标签:

。依赖属性是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

标签:

原文地址:http://www.cnblogs.com/soapgu/p/4660084.html

(1)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!