天天看點

第18章 自定義元素(1)——概述

一、使用自定義控件前要三思

在使用WPF以前,動辄使用自定義控件幾乎成了慣性思維,比如需要一個帶圖檔的按鈕,但在WPF中此類任務卻不需要如此大費周章,因為控件可以嵌套使用以及可以為控件外觀打造一套新的樣式就可以了.是否需要我們來自定義控件,這需要你考慮目前已有控件的真正邏輯功能而不要局限于外觀,如果目前的控件都不能直覺地表達你的想法,那麼你可以自己來打造一個控件,否則,也許我們僅僅改變一下目前控件的模闆等就可以完成任務.很多人在自定義控件上經常犯的錯誤是:重複撰寫已有的邏輯。

二、自定義元素概述

①一般在專門的類庫程式集(DLL)中放置自定義元素,這樣可以在多個WPF應用程式之間共享自定義元素。

②自定義元素首先要選擇正确的基類進行繼承,基類清單見P454-P455。

③常用的基類有UserControl和特殊控件類。

UserControl:用于組合一組控件作為一個子產品,友善在多個視窗中快速重用。

特殊控件類:指的就是現有的控件,通過繼承該類可以改進現有控件。

三、UserControl還是CustomControl?

要在WPF中自定義一個控件,使用UserControl與CustomControl都是不錯的選擇(除此之外,還有更多選擇,比如打造一個自定義的面闆,但這不在本文的讨論範圍),他們的差別在于:

①UserControl,其更像WinForm中自定義控件的開發風格,在開發上更簡單快速,幾乎可以簡單地了解為:利用設計器來将多個已有控件作為子元素來拼湊成一個UserControl并修改其外觀,然後背景邏輯代碼直接通路這些子元素.其最大的弊端在于:其對模闆樣式等支援度不好,其重複使用的範圍有限.

②CustomControl, 其開發出來的控件才真正具有WPF風格,其對模闆樣式有着很好的支援,這是因為打造CustomControl時做到了邏輯代碼與外觀相分離,即使換上一套完全不同的視覺樹其同樣能很好的工作,就像WPF内置的控件一樣.

③在使用Visual Studio打造控件時,UserControl與CustomControl的差别就更加明顯,在項目中添加一個UserControl時,我們會發現設計器為我們添加了一個XAML檔案以及一個對應的.CS檔案(或.VB等),然後你就可以像設計普通窗體一樣設計該UserControl; 如果我們是在項目中添加一個CustomControl,情況卻不是這樣,設計器會為我們生成一個.CS檔案(或.VB等),該檔案用于編寫控件的背景邏輯,而控件的外觀卻定義在了軟體的應用主題(Theme)中了(如果你沒有為軟體定義通用主題,其會自動生成一個通用主題themes\generic.xaml, 然後主題中會自動為你的控件生成一個Style),并将通用主題與該控件關聯了起來.這也就是CustomControl對樣式的支援度比UserControl好的原因。

第18章 自定義元素(1)——概述

繼續閱讀