我創建了一個DP的用戶控件。 現在我在我的頁面中使用該UC 5次,我的問題是,DP是一個靜態屬性,因此它只會創建一個實例。現在該值如何保持5個不同的控件?依賴屬性如何保持值
2
A
回答
9
依賴屬性按類型創建,可根據需要自定義。所以,如果你的屏幕有,比方說,20個按鈕你的存儲空間佔用的屬性是一樣好的按鈕。
的DependencyObject維持兩個哈希表成員:
- 一個靜態
私有靜態Hashtable的_staticProperties =新的Hashtable();
- 另一個非靜態。
private Hashtable properties = new Hashtable();
靜態成員存儲DP(默認值爲所有類型)和非靜態成員存儲值已更改的默認值。
當你調用你的dp的SetValue方法時,你基本上是在你的非靜態HashTable中添加一個項目。當調用GetValue時,DependencyObject首先檢查非靜態HashTable是否有鍵;如果找到則返回值,否則返回從靜態成員的值(這是默認值)
所以,
DP不成立,直到它改變時間的任何值。
DP是靜態的,因此您的應用可以觀察它們的值;這就是爲什麼你註冊一個DP而不是實例化。
DP保持在的DependencyObject類中聲明一個哈希表價值,你需要通過車主的類型,而註冊一個。
您還可以在這裏看到它在我的博客:How Dependency Property holds value
1
在聲明DependencyProperty
只有屬性的單一定義,這就是爲什麼你讓使用靜態成員的定義。
但是,每個具有DependencyProperty
值的對象都會獲取其自己的屬性值。在類上創建DependencyProperty
的正常模式是創建屬性setter和getter,並且此屬性不是靜態的。
用於定義DependencyProperty
的基本模式是這樣的:
public class MyObject : DependencyObject {
public static readonly DependencyProperty SomethingProperty =
DependencyProperty.Register(
"Something",
typeof(String),
typeof(MyObject),
new PropertyMetadata(default(String))
);
public String Something {
get { return (String) GetValue(SomethingProperty); }
set { SetValue(SomethingProperty, value); }
}
}
注意,屬性定義是靜態的,但不是實際的屬性。
MyObject
的每個實例都將擁有自己的Something
依賴項屬性值。
相關問題
- 1. 如何保持對對象的某些屬性的依賴
- 2. WPF - 如何保持依賴項屬性和視圖模型屬性同步?
- 3. 如何從附屬依賴項屬性設置屬性值?
- 4. 依賴屬性
- 5. 依賴屬性
- 6. WPF:CLR屬性依賴屬性
- 7. 依賴屬性空
- 8. 依賴屬性WPF
- 9. 依賴屬性依賴於另一個
- 10. 不依賴於UserControl的依賴屬性
- 11. 綁定依賴屬性到另一個依賴屬性
- 12. 依賴於其他屬性的依賴屬性
- 13. 如何綁定回依賴項屬性
- 14. 依賴屬性:如何設計
- 15. 如何避免遞歸依賴屬性
- 16. 依賴屬性如何工作?
- 17. 依賴屬性如何工作?
- 18. 替代依賴項屬性值
- 19. 依賴項屬性默認值
- 20. 依賴屬性值優先和動畫
- 21. 依賴屬性是價值分配
- 22. WPF依賴項屬性返回值
- 23. 屬性更改依賴屬性
- 24. 註冊屬性作爲依賴屬性
- 25. 如何查找公開依賴項屬性的給定成員屬性的依賴項屬性標識符?
- 26. 如何保持IntentService的屬性持久?
- 27. 容易依賴項屬性
- 28. 依賴屬性 - 存儲,Grid.Row
- 29. 轉換器依賴屬性
- 30. 使用依賴項屬性