學習WPF 初識依賴項屬性

2021-09-09 01:22:16 字數 1682 閱讀 8971

入門

首先建立乙個依賴項屬性

然後繫結父容器的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》

WPF 依賴項屬性

對比與c 的屬性。依賴屬性是為wpf建立的。wpf很多情況下都在使用依賴屬性。1 依賴屬性加入了屬性變化通知,限制,驗證功能。2 節約記憶體 3 通過多種方式設定依賴屬性的值 1 依賴屬性繼承自dependencyobject 2 使用public static 宣告乙個變數 public stat...

WPF中的依賴項屬性

已經學習了好幾天了,乙個小例子讓我豁然開朗,以下是我個人的一點理解 由於wpf由xaml檔案和c 檔案組成的,c 負責邏輯處理,所以很多控制項屬性就會別修改,此時我們希望他能夠反映到介面上,依賴項屬性就能夠做到這點。當然系統的控制項的一般的屬性都是依賴性的,我們不必擔心,但在資料繫結的時候,我們會經...

wpf學習筆記 依賴屬性

臨畢業進入長沙一家公司實習,專案比較緊,希望能利用下班前的一點時間做更多的學習,所以以後的內容都將十分簡單,十五分鐘搞定。依賴屬性是wpf引入的新概念,基本形式如 public int myproperty set using a dependencyproperty as the backing ...