1. 程式人生 > 實用技巧 >wpf控制元件模型

wpf控制元件模型

WPF對控制元件基型別的繼承方式如下

(其中綠色表示的類是抽象類,藍色表示的類是非抽象類)

1.內容控制元件模型

基類System.Windows.Controls.Control類:表示使用者介面 (UI) 元素的基類,這些元素使用ControlTemplate來定義其外觀。

  • ContentControl:ContentControl 是一種包含一段內容的 Control

  • HeaderedContentControl:包含一段內容並具有 Header 的 ContentControl

  • ItemsControl:可包含多個專案(例如字串、物件或其他元素)的 Control

  • HeaderedItemsControl
    :可包含多個專案(例如字串、物件或其他元素)並具有標題的ItemsControl

內容控制元件只能包含一個子元素,佈局容器可以不限制的包含子元素。

ContentControl模型的型別具有一個 Content 屬性。Content 屬性的型別為Object,因此對於您在 ContentControl 中可以放置的內容沒有任何限制,可以使用可擴充套件應用程式標記語言 (XAML) 或程式碼來設定 Content。

簡單的說就是主要有Content屬性的都具有這個模型,簡單看個例子

   <!--只能放置一個控制元件-->
   <Button  Height="23" HorizontalAlignment="Left" Margin="12,45,0,0" Name="button1" VerticalAlignment="Top" Width="75">
       <Button.Content>
           <Image Source="Images/main1.jpg" Width="50"></Image>
       </Button.Content>
   </Button>

這樣我們就可以把一個Image控制元件放到Button中了
像上面的情況,我們只能放置一個控制元件到Content中,如果想放置多個,我們需要加一個panel容器才可以

 <!--加一個容器就可以放置多個控制元件了-->
 <Button  Height="34" HorizontalAlignment="Left" Margin="10,98,0,0" Name="button2" VerticalAlignment="Top" Width="107">
      <Button.Content>
          <StackPanel  Orientation="Horizontal" Width="104">
              <TextBlock Text="名字" HorizontalAlignment="Center"></TextBlock>
              <Image Source="Images/main1.jpg" Width="50"></Image>
          </StackPanel>
      </Button.Content>
 </Button>

2.Panel佈局容器控制元件模型

基類System.Windows.Controls.Panel抽象類為所有 Panel 元素提供基類。使用 Panel 元素在 Windows Presentation Foundation (WPF) 應用程式中放置和排列子物件。


常用的佈局容器說明:

StackPanel:堆疊面板,通過Orientation屬性設定子元素的佈局排列方向為“Vertical”(垂直)和“Horizontal”(水平),不寫其預設值為“Vertical”,當設定為“Vertical”時子元素會沿垂直方向拉伸,反之設定為“Horizontal”時子元素會沿水平方向拉伸。

DockPanel:支援子元素停靠在面板的任意一條邊上,通過附加屬性Dock控制他們的停靠位置(Left、Top、Right、Bottom),填充空間按照“先到先得”的原則,最後一個加入面板的子元素將填滿剩下的空間,如不想將最後加入面板的元素填滿剩下的空間將屬性LastChildFill值設為“False”,預設為“True”。

WrapPanel:可換行面板與StackPanel相似,通過Orientation屬性設定子元素的排列順序,從左至右按順序位置定位子元素,當前行無法放下元素時斷開至下一行,或者排序按照從上至下或從右至左的順序進行,通過ItemHeight可以設定當前面板中所有子元素的高度,當然也有ItemWidth設定所有子元素的寬度。

Canvas:面板是最輕量級的佈局容器,它不會自動調整內部元素的排列和大小,不指定元素位置,元素將預設顯示在畫布的左上方。Canvas主要用來畫圖。Canvas預設不會自動裁剪超過自身範圍的內容,即溢位的內容會顯示在Canvas外面,這是因為Canvas的ClipToBounds屬性預設值是“False”,我們可以顯式地設定為“True”來裁剪多出的內容。下面XAML程式碼簡單演示了Canvas面板的使用。

Grid:比起其他Panel,功能是最多最為複雜的佈局控制元件。它由<Grid.ColumnDefinitions>列元素集合和<Grid.RowDefinitions>行元素集合兩種元素組成。而放在Grid面板中的元素必須顯式採用附加屬性定義其所在行和列,否則元素均預設放置在第0行第0列。

3.Sharp圖形控制元件模型

基類System.Windows.Sharps.Sharp抽象類:為 Ellipse、Polygon 和 Rectangle 之類的形狀元素提供基類。

4.Decorator裝飾器控制元件模型

基類System.Windows.Controls.Decorator:提供在單個子元素(如 Border 或 Viewbox)上或周圍應用效果的元素的基類。