Grid是很常見的容器(container), 它可以用來作UI layout, 它的功能類似HTML中的Table,可定義表格的直行與橫列.
如果你想要製定一個3x3的表格(三直行+三橫列), 寫法如下面程式碼(XAML檔和C#)所示:
在此範例中, 我們可以讓ShowGridLines = true以顯示格子之間的線, 方便作Debug用.
如果你想要製定一個3x3的表格(三直行+三橫列), 寫法如下面程式碼(XAML檔和C#)所示:
XAML:
<Grid ShowGridLines="True" Name="grid"> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> </Grid>
C#
public GridWindow()
{
InitializeComponent();
Grid grid1 = new Grid();
grid1.ShowGridLines = true;
for (int i = 0; i < 3; i++)
{
ColumnDefinition colDef = new ColumnDefinition();
RowDefinition rowDef = new RowDefinition();
grid1.ColumnDefinitions.Add(colDef);
grid1.RowDefinitions.Add(rowDef);
}
this.AddChild(grid1);
}
在此範例中, 我們可以讓ShowGridLines = true以顯示格子之間的線, 方便作Debug用.

[圖 1] 3X3 Grid
GridUnitType可用來設定尺寸單位的類型, 你可以搭配GridLength()來指定指定行和列的大小,其成員如下:
- Pixel - 固定大小
RowDefinition rowDef = new RowDefinition();
rowDef.Height = new GridLength(50, GridUnitType.Pixel)
- Auto - 根據Content(內容)來設定大小
RowDefinition rowDef = new RowDefinition();
rowDef.Height = GridLength.Auto;
- Star - 分攤剩下的空間
RowDefinition rowDef = new RowDefinition();
rowDef.Height = new GridLength(33, GridUnitType.Star) ;
如果你想要把控制項塞到Grid裡面, 可以使用SetRow和SetColumn方法, 指定row和column的index(從0開始), 來表式控制項擺放的位置.
example:
Grid.SetRow(control, 1);
Grid.SetColumn(control, 2);
你也可以使用SetRowSpan和SetColumn的方法, 指定要跨列和行的個數.
example:
Grid.SetRowSpan(control, 3);
Grid.SetColumnSpan(control, 3);
下面的範例, 我們將示範如何將控制項放入3X3的Grid 中, 然後適當調整Grid行和列的大小, 畫面如下所示:

[圖 2] Number Grid
在Grid的第一列中, 我們會放一個內容為"Number Grid"的TextBox, 此TextBox會橫跨3行, 列的高度會設為Auto.
然後, 我們在Grid其他的cell中各填入一個數字Button, 其程式碼如下所示:
XAML
C#
參考資料:
MSDN- Grid 類別
WPF Tutorial - Grid
example:
Grid.SetRow(control, 1);
Grid.SetColumn(control, 2);
你也可以使用SetRowSpan和SetColumn的方法, 指定要跨列和行的個數.
example:
Grid.SetRowSpan(control, 3);
Grid.SetColumnSpan(control, 3);
下面的範例, 我們將示範如何將控制項放入3X3的Grid 中, 然後適當調整Grid行和列的大小, 畫面如下所示:

[圖 2] Number Grid
在Grid的第一列中, 我們會放一個內容為"Number Grid"的TextBox, 此TextBox會橫跨3行, 列的高度會設為Auto.
然後, 我們在Grid其他的cell中各填入一個數字Button, 其程式碼如下所示:
XAML
<Grid Name="grid1"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <TextBox Name="txbBox" FontSize="25" Background="BurlyWood" Foreground="DarkGreen" Text="Number Grid" HorizontalContentAlignment ="Center" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3"> </TextBox> <Button FontSize="30" Name="button1" Grid.Row="1" Grid.Column="0">1 </Button> <Button FontSize="30" Name="button2" Grid.Row="1" Grid.Column="1">2 </Button> <Button FontSize="30" Name="button3" Grid.Row="1" Grid.Column="2">3 </Button> <Button FontSize="30" Name="button4" Grid.Row="2" Grid.Column="0">4 </Button> <Button FontSize="30" Name="button5" Grid.Row="2" Grid.Column="1">5 </Button> <Button FontSize="30" Name="button6" Grid.Row="2" Grid.Column="2">6 </Button> </Grid>
C#
public GridWindow()
{
InitializeComponent();
Grid grid1 = new Grid();
for (int i = 0; i < 3; i++)
{
RowDefinition rowDef =
new RowDefinition();
ColumnDefinition colDef =
new ColumnDefinition();
if( i == 0)
rowDef.Height = GridLength.Auto;
else
rowDef.Height =
new GridLength(1, GridUnitType.Star);
grid1.ColumnDefinitions.Add(colDef);
grid1.RowDefinitions.Add(rowDef);
}
this.AddChild(grid1);
// Add a TexBox
TextBox txbBox = new TextBox();
txbBox.FontSize = 25;
txbBox.Background = Brushes.BurlyWood;
txbBox.Foreground = Brushes.DarkGreen;
txbBox.Text = "Number Grid";
txbBox.HorizontalContentAlignment =
HorizontalAlignment.Center;
grid1.Children.Add(txbBox);
Grid.SetRow(txbBox, 0);
Grid.SetColumn(txbBox , 0);
Grid.SetColumnSpan(txbBox, 3);
// Add button1
Button button1 = new Button();
button1.FontSize = 30;
button1.Content = "1";
grid1.Children.Add(button1);
Grid.SetRow(button1, 1);
Grid.SetColumn(button1, 0);
// Add button2
Button button2 = new Button();
button2.FontSize = 30;
button2.Content = "2";
grid1.Children.Add(button2);
Grid.SetRow(button2, 1);
Grid.SetColumn(button2, 1);
// Add button3
Button button3 = new Button();
button3.FontSize = 30;
button3.Content = "3";
grid1.Children.Add(button3);
Grid.SetRow(button3, 1);
Grid.SetColumn(button3, 2);
// Add button4
Button button4 = new Button();
button4.FontSize = 30;
button4.Content = "4";
grid1.Children.Add(button4);
Grid.SetRow(button4, 2);
Grid.SetColumn(button4, 0);
// Add button5
Button button5 = new Button();
button5.FontSize = 30;
button5.Content = "5";
grid1.Children.Add(button5);
Grid.SetRow(button5, 2);
Grid.SetColumn(button5, 1);
// Add button6
Button button6 = new Button();
button6.FontSize = 30;
button6.Content = "6";
grid1.Children.Add(button6);
Grid.SetRow(button6, 2);
Grid.SetColumn(button6, 2);
}
參考資料:
MSDN- Grid 類別
WPF Tutorial - Grid
沒有留言:
張貼留言