我已經開始爲高度可視化的項目編寫一些自定義控件。我想知道在編寫WPF自定義控件時,您的「最佳實踐」是什麼?在WPF中編寫自定義控件的最佳做法是什麼?
回答
確保可以在不改變控制方式的情況下對控件進行重新設計和重新模板化。不要讓控件假定列表框和按鈕都在同一個面板中,或者甚至有一個列表框或按鈕。查看MSDN article on control authoring瞭解如何執行此操作的一些建議。
保持屬性名稱與內置控件的屬性名稱相同,只要不改變其含義即可。
例如如果您有一個CustomerDisplayer自定義控件,請不要調用客戶的客戶列表,將其稱爲ItemsSource。
起初它可能看起來不符合直覺,但是從長遠來看,它可以節省很多頭痛,因爲未來的程序員可以對一個名爲ItemsSource的屬性如何行動做出很多假設,而這些假設對於一個Customers屬性。
如果您希望自定義的控制,以支持直接的內容是這樣的:
<CustomObject>
Direct content example 1
</CustomObject>
<!-- or -->
<CustomObject>
<Button Content="Direct content example 2" />
</CustomObject>
然後,你需要使用ContentPropertyAttribute
告訴哪個屬性,當你寫這樣的XAML實際上是被設定WPF。
的屬性可以像這樣使用:
[ContentProperty("NameOfProperty")]
public class CustomObject
{
[...]
ContentControl
使用該屬性來設置內容屬性,但請注意,屬性可以叫什麼;例如WPF TextBox
使用此屬性來設置Text
屬性。
E.G.
[ContentProperty("Text")]
酒店也做不必須是依賴屬性(見這方面的證據MSDN文檔的例子)。
最後,這種屬性是特定於XAML分析器而不是ContentControl
,並且可以與任何類型的能夠從TextBox
例如上述(TextBox
不從ContentControl
派生)可以看出可以使用。
某些內容控件取決於其ControlTemplate
中是否存在其他控件。通常這應該使用TemplatePart
屬性進行記錄。
例如,Combobox
控件取決於其模板中是否存在TextBox
和Popup
控件。
這將通過把屬性的類像這樣被記錄:
[TemplatePart(name="PART_EditableTextBox", type=typeof(TextBox))]
[TemplatePart(name="PART_Popup", type=typeof(Popup))]
public class Combobox : Selector
{
[...]
的命名約定爲「PART_controlIdentifier」。
相關項目將隨後在控制模板被賦予相同的名稱,以便它們可以定位在OnApplyTemplate
方法。
這便於控制掛鉤到事件,設置屬性和調用方法包含在模板中的控件。
此屬性是文檔的目的,使人們設計定製控件模板(和工具,如Expression Blend中)知道,控制依賴於他人的存在。
瞭解如何使用這兩種dependency properties和routed events(以及它們如何工作),這樣就可以在自己的控制有效地使用它們。
這些類型的兩者都提供集成與內置WPF系統的控制服務。
通過自定義使用這兩個功能控制,你會得到以下優點:
依賴屬性的數據綁定,動畫提供支持,並且可以在風格下使用。
路由事件可以通過可視化樹,這意味着其他元件可以處理事件將會傳播。
- 1. 什麼是WPF自定義控件的最佳參考資料
- 2. WPF自定義控件資源最佳做法
- 3. 在angularjs中編寫控制器方法設計的最佳做法是什麼?
- 4. 編寫和組織javascript插件的最佳做法是什麼?
- 5. 在WPF中編寫自定義厚度控件的最佳方式?
- 6. 創建自定義例外的最佳做法是什麼?
- 7. 在tornadofx中創建自定義UI組件的最佳做法是什麼?
- 8. 在WinForm中處理CheckBox控件的最佳做法是什麼?
- 9. 最佳做法是什麼?
- 10. 編寫詳細設計文檔的最佳做法是什麼?
- 11. 在jayData中使用自定義實體的最佳做法是什麼?
- 12. 在laravel 5中寫入代碼的最佳做法是什麼?*
- 13. 編寫自己的node.js回調函數的最佳做法是什麼?
- 14. React Native:定義用戶定義組件的最佳做法是什麼?
- 15. WPF中Databinding和ObservableCollections的最佳做法是什麼?
- 16. 文件寫入的最佳做法是什麼
- 17. 存儲自定義值而不是外鍵的最佳做法是什麼?
- 18. 創建自定義Windows窗體控件的最佳方法是什麼?
- 19. 在python中編寫「try else」的最佳方法是什麼?
- 20. 在QT中編寫自定義佈局最簡單的方法是什麼?
- 21. 什麼是在C#中的文件處理的最佳做法?
- 22. WPF編寫自定義控制
- 23. log4cxx的最佳做法是什麼?
- 24. 什麼是ViewModel的最佳做法
- 25. 編寫自定義控件
- 26. WPF ValueConverter錯誤處理的最佳做法是什麼?
- 27. WPF:什麼是佈局的最佳做法
- 28. 圍繞繼承自定義片段的最佳做法是什麼
- 29. 使用WPF,更新自定義按鈕控件的背景的最佳方法是什麼?
- 30. 用Perl編寫gunzip文件的最佳方法是什麼?
您應該針對此類問題提出一個建議/回答,以備將來參考。 – 2009-08-20 14:33:05