跟我一起學WPF(2):WPF控件基礎


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>

界面展現效果如圖:

image

沒有接觸過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界面元素類之間的繼承關系:

 

image

 

  • 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等基本控件的使用方法。


免責聲明!

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



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