WPF基础学习笔记(一)Dependency Object 和 Dependency Property
。依賴屬性是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——深入剖析依賴屬性
?
轉載于:https://www.cnblogs.com/soapgu/p/4660084.html
總結
以上是生活随笔為你收集整理的WPF基础学习笔记(一)Dependency Object 和 Dependency Property的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GIT的 .gitignore 配置
- 下一篇: C++的new和delete