介绍:
在Metro中从Silverlight中保留下来了一些布局控件及一些新增的布局控件。
本节主要讲解从Silverlight中延续下来的布局控件Grid、Canvas及StackPanel,如果你有Silvelright或WPF基础可以跳过本节。
Grid网格布局控件
定义由行和列组成的网格区域。
Grid.xaml
1 <UserControl
2 x:Class="BlankApplication.Grid"
3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5 xmlns:local="using:BlankApplication"
6 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
7 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
8 mc:Ignorable="d"
9 d:DesignHeight="300"
10 d:DesignWidth="400">
11
12 <!--Grid表格布局
13 Grid.RowDefinitions:定义Grid中的行
14 Grid.ColumnDefinitions :定义Grid的列
15
16 -->
17 <Grid HorizontalAlignment="Center" Height="210" VerticalAlignment="Center" Width="305">
18 <Grid.RowDefinitions>
19 <!--定义三行及每行高度-->
20 <RowDefinition Height="30*"/>
21 <RowDefinition Height="32*"/>
22 <RowDefinition Height="43*"/>
23 </Grid.RowDefinitions>
24 <Grid.ColumnDefinitions>
25 <!--定义四列及每列宽度-->
26 <ColumnDefinition Width="58*" />
27 <ColumnDefinition Width="61*"/>
28 <ColumnDefinition Width="123*"/>
29 <ColumnDefinition Width="63*"/>
30 </Grid.ColumnDefinitions>
31 <!--Grid第一列-->
32 <Rectangle Fill="#FFF4F4F5"/>
33 <Rectangle Fill="#FF0B0BEE" Grid.Row="1" />
34 <Rectangle Fill="#FFEECF0B" Grid.Row="2" />
35 <!--Grid第二列-->
36 <Rectangle Fill="#FF34EE0B" Grid.Row="2" Grid.Column="1" />
37 <Rectangle Fill="#FFFF9A09" Grid.Row="0" Grid.Column="1" />
38 <Rectangle Fill="#FF08B7D3" Grid.Row="1" Grid.Column="1" />
39 <!--Grid第三列-->
40 <Rectangle Fill="#FFD30889" Grid.Row="0" Grid.Column="2" />
41 <Rectangle Fill="#FFB708D3" Grid.Row="1" Grid.Column="2" />
42 <Rectangle Fill="#FF4B484B" Grid.Row="2" Grid.Column="2" />
43 <!--Grid第四列-->
44 <Rectangle Fill="#FF661F4D" Grid.Row="0" Grid.Column="3" />
45 <Rectangle Fill="#FF0DF0BC" Grid.Row="1" Grid.Column="3" />
46 <Rectangle Fill="#FF0FAA4E" Grid.Row="2" Grid.Column="3" />
47 </Grid>
48
49 </UserControl>
2 x:Class="BlankApplication.Grid"
3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5 xmlns:local="using:BlankApplication"
6 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
7 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
8 mc:Ignorable="d"
9 d:DesignHeight="300"
10 d:DesignWidth="400">
11
12 <!--Grid表格布局
13 Grid.RowDefinitions:定义Grid中的行
14 Grid.ColumnDefinitions :定义Grid的列
15
16 -->
17 <Grid HorizontalAlignment="Center" Height="210" VerticalAlignment="Center" Width="305">
18 <Grid.RowDefinitions>
19 <!--定义三行及每行高度-->
20 <RowDefinition Height="30*"/>
21 <RowDefinition Height="32*"/>
22 <RowDefinition Height="43*"/>
23 </Grid.RowDefinitions>
24 <Grid.ColumnDefinitions>
25 <!--定义四列及每列宽度-->
26 <ColumnDefinition Width="58*" />
27 <ColumnDefinition Width="61*"/>
28 <ColumnDefinition Width="123*"/>
29 <ColumnDefinition Width="63*"/>
30 </Grid.ColumnDefinitions>
31 <!--Grid第一列-->
32 <Rectangle Fill="#FFF4F4F5"/>
33 <Rectangle Fill="#FF0B0BEE" Grid.Row="1" />
34 <Rectangle Fill="#FFEECF0B" Grid.Row="2" />
35 <!--Grid第二列-->
36 <Rectangle Fill="#FF34EE0B" Grid.Row="2" Grid.Column="1" />
37 <Rectangle Fill="#FFFF9A09" Grid.Row="0" Grid.Column="1" />
38 <Rectangle Fill="#FF08B7D3" Grid.Row="1" Grid.Column="1" />
39 <!--Grid第三列-->
40 <Rectangle Fill="#FFD30889" Grid.Row="0" Grid.Column="2" />
41 <Rectangle Fill="#FFB708D3" Grid.Row="1" Grid.Column="2" />
42 <Rectangle Fill="#FF4B484B" Grid.Row="2" Grid.Column="2" />
43 <!--Grid第四列-->
44 <Rectangle Fill="#FF661F4D" Grid.Row="0" Grid.Column="3" />
45 <Rectangle Fill="#FF0DF0BC" Grid.Row="1" Grid.Column="3" />
46 <Rectangle Fill="#FF0FAA4E" Grid.Row="2" Grid.Column="3" />
47 </Grid>
48
49 </UserControl>
Canvas画布布局控件
定义一个区域,在该区域中可以使用相对于该区域的坐标显式定位子元素。
canvas.xaml
1 <UserControl
2 x:Class="BlankApplication.Canvas"
3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5 xmlns:local="using:BlankApplication"
6 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
7 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
8 mc:Ignorable="d"
9 d:DesignHeight="300"
10 d:DesignWidth="400">
11
12 <Grid>
13 <Canvas HorizontalAlignment="Center" Height="144" Margin="0" VerticalAlignment="Center" Width="276" Background="#FFAA6C6C">
14 <!--Canvas里子元素通过调整Canvas区域的绝对位置来定位
15 Canvas.Left - 以左上角为原点,Canvas X轴的距离
16 Canvas.Top - 以左上角为原点,Canvas Y轴的距离
17 -->
18 <Ellipse Fill="#FF0B0BC5" Height="51" Canvas.Left="30" Stroke="Black" Canvas.Top="52" Width="53"/>
19 <Rectangle Fill="#FF32FD12" Height="56" Canvas.Left="119" Stroke="Black" Canvas.Top="38" Width="84"/>
20 </Canvas>
21
22 </Grid>23 </UserControl>
2 x:Class="BlankApplication.Canvas"
3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5 xmlns:local="using:BlankApplication"
6 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
7 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
8 mc:Ignorable="d"
9 d:DesignHeight="300"
10 d:DesignWidth="400">
11
12 <Grid>
13 <Canvas HorizontalAlignment="Center" Height="144" Margin="0" VerticalAlignment="Center" Width="276" Background="#FFAA6C6C">
14 <!--Canvas里子元素通过调整Canvas区域的绝对位置来定位
15 Canvas.Left - 以左上角为原点,Canvas X轴的距离
16 Canvas.Top - 以左上角为原点,Canvas Y轴的距离
17 -->
18 <Ellipse Fill="#FF0B0BC5" Height="51" Canvas.Left="30" Stroke="Black" Canvas.Top="52" Width="53"/>
19 <Rectangle Fill="#FF32FD12" Height="56" Canvas.Left="119" Stroke="Black" Canvas.Top="38" Width="84"/>
20 </Canvas>
21
22 </Grid>23 </UserControl>
StackPanel排列布局控件
将子元素排列成一行(可沿水平或垂直方向)
stackpanel.xaml
1 <UserControl
2 x:Class="BlankApplication.StackPanel"
3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5 xmlns:local="using:BlankApplication"
6 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
7 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
8 mc:Ignorable="d"
9 d:DesignHeight="300"
10 d:DesignWidth="400">
11 <StackPanel>
12 <StackPanel Orientation="Horizontal" x:Name="stackpanel">
13 <Button>ok</Button>
14 <Button>ok</Button>
15 <Button>ok</Button>
16 <Button>ok</Button>
17 <Button>ok</Button>
18 <Button>ok</Button>
19 <Button>ok</Button>
20 <Button>ok</Button>
21 <Button>ok</Button>
22 <Button>ok</Button>
23 <Button>ok</Button>
24 <Button>ok</Button>
25 <Button>ok</Button>
26 <Button>ok</Button>
27 </StackPanel>
28 <Button Width="100" Height="80" Margin="10" Click="Button_Click_1">变换方向</Button>
29 </StackPanel>
30 </UserControl>
2 x:Class="BlankApplication.StackPanel"
3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5 xmlns:local="using:BlankApplication"
6 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
7 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
8 mc:Ignorable="d"
9 d:DesignHeight="300"
10 d:DesignWidth="400">
11 <StackPanel>
12 <StackPanel Orientation="Horizontal" x:Name="stackpanel">
13 <Button>ok</Button>
14 <Button>ok</Button>
15 <Button>ok</Button>
16 <Button>ok</Button>
17 <Button>ok</Button>
18 <Button>ok</Button>
19 <Button>ok</Button>
20 <Button>ok</Button>
21 <Button>ok</Button>
22 <Button>ok</Button>
23 <Button>ok</Button>
24 <Button>ok</Button>
25 <Button>ok</Button>
26 <Button>ok</Button>
27 </StackPanel>
28 <Button Width="100" Height="80" Margin="10" Click="Button_Click_1">变换方向</Button>
29 </StackPanel>
30 </UserControl>
stackpanel.xaml.cs
1 using System;
2 using System.Collections.Generic;
3 using System.IO;
4 using System.Linq;
5 using Windows.Foundation;
6 using Windows.Foundation.Collections;
7 using Windows.UI.Xaml;
8 using Windows.UI.Xaml.Controls;
9 using Windows.UI.Xaml.Controls.Primitives;
10 using Windows.UI.Xaml.Data;
11 using Windows.UI.Xaml.Input;
12 using Windows.UI.Xaml.Media;
13 using Windows.UI.Xaml.Navigation;
14
15
16
17 namespace BlankApplication
18 {
19 public sealed partial class StackPanel : UserControl
20 {
21 public StackPanel()
22 {
23 this.InitializeComponent();
24 }
25
26 private void Button_Click_1(object sender, Windows.UI.Xaml.RoutedEventArgs e)
27 {
28 ///更改Stackpanel控件的内部排列方式
29 if(stackpanel.Orientation==Orientation.Horizontal)
30 stackpanel.Orientation = Orientation.Vertical;
31 else
32 stackpanel.Orientation = Orientation.Horizontal;
33 }
34 }
35 }
2 using System.Collections.Generic;
3 using System.IO;
4 using System.Linq;
5 using Windows.Foundation;
6 using Windows.Foundation.Collections;
7 using Windows.UI.Xaml;
8 using Windows.UI.Xaml.Controls;
9 using Windows.UI.Xaml.Controls.Primitives;
10 using Windows.UI.Xaml.Data;
11 using Windows.UI.Xaml.Input;
12 using Windows.UI.Xaml.Media;
13 using Windows.UI.Xaml.Navigation;
14
15
16
17 namespace BlankApplication
18 {
19 public sealed partial class StackPanel : UserControl
20 {
21 public StackPanel()
22 {
23 this.InitializeComponent();
24 }
25
26 private void Button_Click_1(object sender, Windows.UI.Xaml.RoutedEventArgs e)
27 {
28 ///更改Stackpanel控件的内部排列方式
29 if(stackpanel.Orientation==Orientation.Horizontal)
30 stackpanel.Orientation = Orientation.Vertical;
31 else
32 stackpanel.Orientation = Orientation.Horizontal;
33 }
34 }
35 }
ok.Demo源码下载