(一) 建立WPF應用程式
XAML語言:可擴充應用程式标記語言,命名空間與.NET中的不是一一對應的,而是一對多,都是“網址”類型的,是遵循XAML解析器标準的命名規則,不是真正的網址。
xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
對應一些與XAML文法和編譯相關的CLR名稱空間,例如
這裡的xmlns和xmlns:x的差別在于x作為别名,在應用時,以字首形式出現,而xmlns作為預設命名空間,不使用字首辨別的元素,來自該命名空間。
XAML命名空間的文法:
xmlns[:可選映射字首]=“命名空間描述”
**注意:*沒有加可選映射字首的xmlns是WPF預設的命名空間,一個xaml檔案隻能有一個預設的命名空間
一個完整的xaml檔案,必須具備兩個命名空間。
(二) WPF用于布局的面闆包括:
StackPanel 棧面闆、WrapPanel 環繞面闆、DockPanel 停靠面闆、Canvas 畫布、Grid 網格面闆、UniformGrid 均布網格 HorizontalAlignment水準對齊 VerticalAlignment垂直對齊
下面分别介紹:
I. Grid類把窗體分割成若幹網格,有ColumnDefinitions和RowDefinitions兩個屬性,定義多少列、多少行,對于行高和列寬可以設定三類值:
1)絕對值:double數值加機關字尾,預設為像素
2)比例值:double數值後加,表示該行占據窗體剩下的所有的高度,寬度,讓窗體3:1,隻要将兩個行定義分别設定為3和就可以了。
3)自動值:字元串Auto
如果希望列寬可以拖動,Grip布局本身是不支援的,需要用Grid布局加上GridSplitter來實作,GridSplitter會改變Grid初始的行高、列寬,代碼如下:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" BorderBrush="Black" />
<TextBox Grid.Row="1" Grid.Column="0" BorderBrush="Black" />
<GridSplitter Grid.Row="1" Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Center" Width="5" Background="Gray" ShowsPreview="True"></GridSplitter>
<TextBox Grid.Row="1" Grid.Column="2" BorderBrush="Black" />
</Grid>
控件跨行或者跨列:(相當于合并單元格)
正常狀态:
跨列:
跨行和跨列一樣,用Grid.RowSpan。自适應寬度和高度其HorizontalAlignment 和VerticalAlignment 用Stretch,當設定這兩個屬性時,如果向填充整個區域,不能設定Width和Height屬性,Margin是設定控件與父級容器的所有邊距;若為Top則是頂部對齊的效果,此時可以設定Height高度,寬度不可設;若為HorizontalAlignment為Left,VerticalAlignment為Bottom是水準左對齊,可設定寬度,垂直底部對齊,可設定高度。
II. StackPanel相當于一行橫排或者一列豎排(Orientation設定水準垂直屬性),嵌套也能實作Grid效果,是以水準或者豎直方向對子元素進行排列。
III. WrapPanel在一系列可換行的行中放置元素,水準方向上從左到右,垂直方向上自上而下。
IV. DockPanel根據容器的整個邊界調整元素。
V. UniformGrid在不可見但強制所有單元格具有相同尺寸的表中防止元素。
VI. Canvas使用固定坐标絕對定位元素,沒有鎖定或停靠功能,對于尺寸可變的視窗不适用。
讓控件跟着窗體一起變化的方法:
利用WPF中的ViewBox容器空間,它會自動縮放容器中的子空間以填滿自身,但它隻能有一個控件,可以把Canvas控件作為ViewBox控件的子控件,然後在Canvas中布局其他的控件。
<Viewbox Name=”Viewbox1” Stretch=”Fill”>
<Canvas Height=”200”Name=”Canvas1”Width=”300”Background=”#FF8EDE75”>
</Canvas>
</Viewbox>