【WPF學習】第六十三章 理解WPF中的自定義元素


  盡管可在任意WPF項目中編寫自定義元素,但通常希望在專門的類庫程序集(DLL)中放置自定義元素。這樣,可在多個WPF應用程序之間共享自定義元素。

  為確保具有正確的程序集引用和名稱空間導入,當在Visual Studio中創建應用程序時,應當選擇Custom Control Library(WPF)項目類型。在類庫中,可創建任意數量的控件。

  創建自定義控件的第一步是選擇正確的基類進行繼承。下表列出了創建自定義控件時一些常用的基類。

名 稱  說    明
FrameworkElement 當創建自定義元素時,這是最常用的最低級的基類。通常,只有當希望重寫OnRender()方法並使用System.Windows.Media.DrawingContext從頭繪制內容時,才會使用這種方法。
Control 當從頭開始創建控件時,這是最常用的起點。該類是所有用戶交互小組件的基類。Control類添加了用於設置背景、前景、字體和內容對齊方式的屬性。控件類還為自身設置了Tab順序(通過IsTabStop屬性),並且引入了鼠標雙擊功能(通過MouseDoubleClick和PreviewMouseDoubleClick屬性)。但最重要的是,Control類定義了Template屬性,為了得到無限的靈活性。該屬性允許使用自定義元素樹替換其外觀。
ContentControl 這是能夠顯示任意單一內容的控件的基類。顯示的內容可以是元素或結合使用模板的自定義對象(內容通過Content屬性設置,並且可以通過ContentTemplate屬性提供可選的模板)。許多控件都封裝了特定的、類型在一定范圍內的內容(例如,文本框中的文本字符串)。因此這些控件不支持所有元素,所以不是內容控件。
UserControl 這是可使用設計視圖進行配置的內容控件。盡管用戶控件和普通的內容控件是不同的,但當希望在多個窗口中快速重用用戶界面中的不變模塊時(而不是創建真正的能在不同應用程序之間轉移的獨立控件),通常使用該基類

ItemControl或

Selector

ItemsControl是封裝項列表的控件的基類,但不支持選擇,而Selector類是支持選擇的控件的更具體基類。創建自定義控件不經常使用這些類,因為ListBox、ListView以及TreeView控件的數據綁定特性提供了很大的靈活性
Panel 該類是具有布局邏輯控件的基類。布局控件能夠包含多個子元素,並根據特定的布局語義安排這些子元素。通常,面板提供了用於設置子元素的附加屬性,配置如何安排子元素
Decorator 封裝其他元素的元素基類,並且提供了一種圖形效果或特定的功能。兩個明顯的例子是Border和ViewBox,其中Border控件在元素的周圍繪制線條,ViewBox控件使用變換動態縮放其內容。其他修飾元素包括為普通控件(如按鈕)提供熟悉邊框和背景色的修飾類
特殊控件類 如果希望改進現有控件,可直接繼承該控件。例如,可創建具有內置驗證邏輯的TextBox控件。然而,在采取這一步之前,應當首先分析是否可通過事件處理代碼或單獨的組件達到同一目的。這兩種方法都可使自定義邏輯和控件相分離,從而可在其他控件中重用

  

 

   接下來將看到一個用戶控件,一個直接繼承自Contrl類的無外觀的顏色拾取器,一個使用可視化狀態的無外觀的的FlipPanel,一個自定義的布局面板,以及一個繼承自FrameworkElement類並重寫了OnRender()方法的自繪制元素。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM