WPF控件簡介
通過上一篇XAML語言的介紹,我們知道,XAML是一個樹形結構,同樣,WPF控件作為構成整個XAML樹的一部分,也是一個樹形結構。我們看一個簡單的例子。
<Button.Content>
<DockPanel>
<Image Source="F:\01.Code\01.MyCode\WpfApplication1\WpfApplication1\Resources\荷.jpg" Width="30"/>
<TextBlock Text="紅色" Foreground="Red" VerticalAlignment="Center"></TextBlock>
<TextBlock Text="綠色" Foreground="Green" VerticalAlignment="Center"/>
<TextBlock Text="藍色" Foreground="Blue" VerticalAlignment="Center"/>
</DockPanel>
</Button.Content>
界面展現效果如圖:
沒有接觸過WPF的朋友可能會驚訝,一個button里怎么會有那么多內容?我們可以通過VS的對象瀏覽器查看Button類的繼承關系為:
Button->ButtonBase->ContentControl->Control->FrameworkElement。
FrameworkElement是所有WPF界面元素的展現基類(FrameworkElement向上繼承自UIElement->Object),Button繼承ContentControl,使得Button具備了一個容器控件應有的特性,即允許Button擁有一個Content,而這個Content可以為另一個容
器或控件,至於里面具體是什么,完全取決於你想要什么。這也正是WPF的魅力所在,任何控件都是一個樹形結構,且樹形結構的每一級都可以自由定制,理論上我們可以自定義任何一個層級的樣式,來實現任何我們想要的界面展現效果。
WPF控件分類
上面我們講到了Button繼承自ContentControl,應該說是屬於一個內容控件,下面我們系統的對WPF控件進行一下分類,按照我自己的理解,我們有兩種分類方法。
一、按照控件的繼承特性分類
我們先看一下整個WPF界面元素類之間的繼承關系:
- Panel:布局控件,包括Canvas、DockPanel、StackPanel等,可以容納多個基本控件(Control)或者嵌套其他布局控件。用於整體界面的布局,Panel下的控件我們會在下一篇講解。
- Control:基本控件
- ContentControl:內容控件,其內容只能是一個基本控件或布局控件,通常使用一個布局控件作為其Content,然后在布局空間里使用多個基本空間,從而實現復雜的界面效果,其下基本控件有Label、Button、Tooltip。
- HeaderContentControl:帶標題的內容控件,繼承自ContentControl,在ContentControl的基礎上,增加了一個Header屬性。其下基本控件有TabItem、GroupBox等
- ItemsControl:多條目控件,其下基本控件有ListBox、Menu等
- HeaderItemsControl:繼承自ItemsControl,增加了Header屬性,其下控件有MenuItem、TreeViewItem、ToolBar等
- TextBox:基本文本輸入控件。
- TextBlock、Image:直接繼承自FrameworkElemet基類,屬於最普通的基本控件。
二、按照控件的感官特性分類
這里的感官特性我定義的是,站在一個普通用戶的角度上,能看到、感知到的東西。這里講WPF控件分為兩類:
1、 基本控件:用戶可以看到並與之交互的控件,如按鈕、輸入框等,主要涵蓋上述的Control、TextBlock、Image部分
2、 布局控件:用戶察覺不到的,卻對這個系統界面布局有着決定性作用的容器類控件,主要涵蓋上述Panel及其子類部分
文章在以后的描述中將以這種分類方法進行闡述。
WPF控件屬性
通過上面的介紹,我們知道所有的控件(基本控件、容器控件)都繼承自FrameworkElement這個基類,這個基類里定義了WPF控件用到的大部分屬性,我們這里先對這些WPF控件都具有的屬性進行介紹(常用的標紅),后續分別介紹常用基本控件時再對獨有的屬性進行介紹。
- ActualHeight:獲取此元素的呈現高度。
- ActualWidth:獲取次元素的呈現寬度。
- BindingGroup:獲取或設置用於該元素的 System.Windows.Data.BindingGroup
- ContextMenu:獲取或設置該元素的上下文菜單,通常是郵件菜單。
- Cursor:獲取或設置當鼠標指針懸停在此元素上時顯示的光標
- DataContext:獲取或設置元素參與數據綁定時的數據上下文。
- DefaultStyleKey:在使用或定義主題樣式時,獲取或設置用於引用此控件的樣式的鍵。
- FlowDirection:獲取或設置文本和其他UI元素在控制它們布局的任何父元素中的流動方向。是一個枚舉值。默認值為 System.Windows.FlowDirection.LeftToRight
- FocusVisualStyle:獲取或設置一個屬性,該屬性支持自定義將在此元素捕獲鍵盤焦點時應用於此元素的外觀、效果或其他樣式特征
- ForceCursor:獲取或設置一個值,該值指示此元素是否應該強制UI按照Cursor屬性所聲明的方式呈現光標。
- Height:獲取或設置元素的建議高度。
- HorizontalAlignment:獲取或設置在父元素(如面板或項控件)中構成此元素時應用於此元素的水平對齊特征。
- InputScope:獲取或設置此元素使用的輸入上下文
- IsInitialized:獲取一個值,該值指示此元素是否已初始化。
- IsLoaded:獲取一個值,該值指示是否已加載此元素以供呈現。
- Language:獲取或設置適用於某個元素的本地化/全球化語言信息
- LayoutTransform:獲取或設置在執行布局時應該應用於此元素的圖形轉換方式。
- LogicalChildren:獲取此元素的邏輯子元素的一個枚舉器。
- Margin:獲取或設置元素的外邊距。認值是所有屬性都等於 0(零)的 System.Windows.Thickness。
- MaxHeight:獲取或設置元素的最大高度約束。
- MaxWidth:獲取或設置元素的最大寬度約束。
- MinHeight:獲取或設置元素的最小高度約束。
- MinWidth:獲取或設置元素的最小寬度約束。
- Name:獲取或設置元素的標識名稱。該名稱提供一個引用,以便當 XAML 處理器在處理過程中構造標記元素之后,后台代碼可以對該元素進行引用。
- OverridesDefaultStyle:獲取或設置一個值,該值指示此元素是否合並了主題樣式中的樣式屬性。
- Parent:獲取此元素的邏輯父級元素。
- Resources:獲取或設置本地定義的資源字典。
- Style: 獲取或設置此元素在呈現時使用的樣式。
- Tag: 獲取或設置一個可用於存儲有關此元素的自定義信息的任意對象值。
- TemplatedParent: 獲取一個對此元素的模板父級的引用。如果此元素不是通過模板創建而成,則此屬性並不相關
- ToolTip: 獲取或設置在UI中為此元素顯示的工具提示對象。
- Triggers: 獲取直接在此元素上建立或在子元素中建立的觸發器的集合。
- VerticalAlignment:獲取或設置在父元素(如面板或項控件)中組合此元素時應用於此元素的垂直對齊特征。
- VisualChildrenCount: 獲取此元素內的可視化子元素的數目。
- Width: 獲取或設置元素的寬度。
其中讀寫屬性(帶有獲取或設置描述的屬性)可以在XAML中使用,只讀屬性(只有獲取描述的屬性)只能在后台代碼中使用。
WPF控件聲明
通過一個簡單的Button的定義闡述一下Wpf控件的使用
1、 在XAML中聲明
可以從工具箱找到Button控件直接拖拽到窗體上,然后會在相應位置生成一條XAML語句,個人推薦使用手寫XAML的方式,確保控件出現在你想要的地方。
<Button Height="30" Width="120" Name="myButton"/>
這條語句聲明了一個Button對象,且該Button對象的名稱為myButton,高度為30,寬度120,我們在后台代碼可以直接訪問並使用這個對象,如:通過
mybutton.Height=25;可將該Button對象的高度修改為25。
2、 在后台.CS代碼中聲明
Button myButton = new Button(); myButton.Height = 30; myButton.Width = 100;
下一篇我們將學習WPF中Label、TextBLock、Button、TextBox等基本控件的使用方法。


