一、什么是控件(Controls)
控件是指對數據和方法的封裝。控件可以有自己的屬性和方法,其中屬性是控件數據的簡單訪問者,方法則是控件的一些簡單而可見的功能、控件創建過程包括設計、開發、調試(就是所謂的3Ds開發流程,即Design、Develop、Debug)工作, 然后是控件的使用。開發者應該掌握的三項主要內容是:屬性、事件和方法。
所有的wpf控件都是繼承自Control,根據用途上可以分為四種:內容控件(Content Controls)、條目控件(Items Controls)、文本控件(Text Controls)、范圍控件(Range Controls)。
根據創建方式不不同,可以分為常用控件(一般指原生)、擴展控件(繼承於原有控件,進行功能擴展,例如TextBox添加水印文字)、自定義控件(原來沒有,根據功能創造一個控件,繼承於Control或上面提到的四種)、用戶控件(對基礎控件--前面提到的功能單一的控件進行組合,形成一個具有封裝性的功能集合)。
下面將對各種控件進行介紹。
二、控件類型介紹(根據用圖)
1、內容控件
內容控件的最大的特征就是有一個Content屬性,從前面的文章中,我們多多少少也知道Content接收的是一個Object類型,或許我們會立即想到莫非Button就是一個內容控件,確實,Button算是一個內容控件,凡是內容控件都繼承自ContentControl,因為Content屬性就是屬於ContentControl。下面是Button的類圖。

Button是繼承自ButtonBase的,Button有個很有趣的地方就是ButtonBase中存在一個ClickMode屬性,觸發方式在ClickMode中以枚舉的方式展現,Hover,Press和Release,默認也就是Press。
RepeatButton,在wpf中也是一個新增的控件,那么它的用途是什么呢?很簡單,我們在看video的時候都有“快進”,“快退”,你懂的,首先我們看下RepeatButton中的定義,我們發現有一個Delay:作用就是按下時第一次觸發Click的時間延遲,Interval:每次click發生的時間間隔,如果大家玩轉了Timer控件都應該很清楚。
ToggleButton是CheckBox和RadioButton的基類,而且還存在IsThreeState屬性,實際上我們最終的UI呈現的要么是CheckBox,要么是Radiobutton,要使第三種狀態有效,我們只需要設置IsThreeState屬性和Indeterminate事件即可。
2、條目控件
條目控件首先都是繼承自ItemsControl,在ItemsControl中我們發現有兩個比較有意思的屬性,Items和ItemsSource。
Items:
Items屬於ItemCollection的集合類型,所以每一個Item里面都可以放入一個Object類型對象,這里有意思的地方就是,如果我放入的是一個UI元素,那么很好,wpf會調用UI的OnRender方法將UI元素呈現,如果說是一個沒有OnRender方法的元素,那該怎么辦呢?wpf很智能,它會創建一個TextBlock,然后調用該對象的ToString()將字符串呈現在TextBlock上。
ItemsSource:
ItemsSource用於綁定數據源。
下面是它的類圖:

MenuBase:從圖中我們可以看出MenuBase的子類有兩個Menu和ContextMenu。
Selector:既然是選擇性的控件,那么難免少不了SelectedIndex或者SelectedItem。
TabControl:顧名思義就是選項卡,因為我們知道用ListBox是很占用空間的,而TabControl是具有更小的地方展現更多的內容,其實TabControl的每一個標簽頁都是一個TabItem。
ListView:這個控件我們在實際開發中經常用於數據綁定,它是繼承自ListBox,ListBox默認只能顯示一列,而ListView則可以用於顯示多列,這里我提一個很有興趣的玩意ObservableCollection<T>。它有什么用呢?其實ObservableCollection可以允許一個UI元素作為觀察者對它進行監視,也就是說如果ObservableCollection中的元素有變動,作為觀察的UI元素也會相應的改變,下面舉個例子。
StatusBar:狀態欄控件。
TreeView:我們知道TreeView是一個樹形控件,TreeView的數據綁定需要注意。
3、文本控件
在wpf中,文本控件有三個,分別是:TextBox,RichTextBox和PasswordBox,類圖如下:

通過這次學習和思維整理,更加清楚了控件的脈絡,我將在剩下的章節里介紹余下的控件知識。
自定義控件系列博文鏈接:
WPF自定義控件(一)の控件分類
WPF自定義控件(二)の重寫原生控件樣式模板
WPF自定義控件(三)の擴展控件
WPF自定義控件(四)の自定義控件
WPF自定義控件(五)の用戶控件
