Gridとは?
Gridとは、画面レイアウトを行と列で構成し、柔軟のあるグリッド領域を作り、そこにコントロールを配置することで、キレイな画面レイアウトを作成することができます。
イメージ的にはExcelのセルのような感じで、「何列目の何番目にButtonコントロールを設置する」といった使い方で、コントロールを配置することができます。Excelのセル結合のようなこともできるので、希望のマス構成で、レイアウトを作成することができます。
列の定義の書き方
Grid.ColumnDefinitionsの定義の中に、必要な列の数だけ「ColumnDefinition」を記述します。列のはばはWidthプロパティに絶対値で「100」等のピクセルを指定することもできますが、「*」を指定することで、均等な比率で横幅を調整することができます。例えば3列宣言していて、すべての列の定義が「*」の場合は、均等に3列の幅が作られます。「2*」などと、数字を*の前に記述すると、その列のみ2倍などの指定した値の倍率で確保されます。Widthプロパティに「Auto」を指定すると、設置したコントロールの幅で動的に変動します。
<Grid.ColumnDefinitions>
<ColumnDefinition Width="123"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
行の定義の書き方
Grid.RowDefinitionsの定義の中に、必要な行の数だけ「RowDefinition」を記述します。列の幅はHeightプロパティに絶対値で「100」等のピクセルを指定することもできますが、「*」を指定することで、均等な比率で高さを調整することができます。例えば6行宣言していて、すべての行の定義が「*」の場合は、均等に6行の幅が作られます。「2*」などと、数字を*の前に記述すると、その行のみ2倍などの指定した値の倍率で確保されます。Heightプロパティに「Auto」を指定すると、設置したコントロールの高さで動的に変動します。
<Grid.RowDefinitions>
<RowDefinition Height="123"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="2*"/>
</Grid.RowDefinitions>
コントロールをグリッドのどのマスに設置するかの指定方法
コントロールをグリッドのマスに設置する場合は、Grid.RowとGrid.Columnで配置する場所を指定します。インデックスは左上から0始まりです。
<Button Grid.Row="1"
Grid.Column="2"/>
セルを結合するときは、• Grid.ColumnSpanおよびGrid.RowSpanを使用します。指定した値だけセルを結合します。
サンプルコード
次のサンプルコードでは、電卓イメージのレイアウトを作成しています。最初に値を表示するラベルを設置し、その下に、電卓ボタンを設置しています。各ボタンはMarginを5にすることで、コントロールの周りの余白を5ピクセル確保しています。また上部のラベルと「0」のボタンはColumnSpanでセルの結合をしています。
<Window x:Class="WPF003.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPF003"
mc:Ignorable="d"
Title="MainWindow" Height="525" Width="350">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="2*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Label Content="0"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
FontSize="60"
Grid.ColumnSpan="4"/>
<Button Content="AC"
Margin="5"
Grid.Column="0"
Grid.Row="1"/>
<Button Content="+/-"
Margin="5"
Grid.Row="1"
Grid.Column="1"/>
<Button Content="%"
Margin="5"
Grid.Row="1"
Grid.Column="2"/>
<Button Content="/"
Margin="5"
Grid.Row="1"
Grid.Column="3"/>
<Button Content="7"
Margin="5"
Grid.Row="2"
Grid.Column="0"/>
<Button Content="8"
Margin="5"
Grid.Row="2"
Grid.Column="1"/>
<Button Content="9"
Margin="5"
Grid.Row="2"
Grid.Column="2"/>
<Button Content="*"
Margin="5"
Grid.Row="2"
Grid.Column="3"/>
<Button Content="4"
Margin="5"
Grid.Row="3"
Grid.Column="0"/>
<Button Content="5"
Margin="5"
Grid.Row="3"
Grid.Column="1"/>
<Button Content="6"
Margin="5"
Grid.Row="3"
Grid.Column="2"/>
<Button Content="-"
Margin="5"
Grid.Row="3"
Grid.Column="3"/>
<Button Content="1"
Margin="5"
Grid.Row="4"
Grid.Column="0"/>
<Button Content="2"
Margin="5"
Grid.Row="4"
Grid.Column="1"/>
<Button Content="3"
Margin="5"
Grid.Row="4"
Grid.Column="2"/>
<Button Content="+"
Margin="5"
Grid.Row="4"
Grid.Column="3"/>
<Button Content="0"
Margin="5"
Grid.Row="5"
Grid.Column="0"
Grid.ColumnSpan="2"/>
<Button Content="."
Margin="5"
Grid.Row="5"
Grid.Column="2"/>
<Button Content="="
Margin="5"
Grid.Row="5"
Grid.Column="3"/>
</Grid>
</Window>
このXamlを記述したときの画面レイアウトは次のようになります。
- C#WPFの道#1!WPFのプロジェクト作成方法をわかりやすく解説!
- C#WPFの道#2!StackPanelの使い方をわかりやすく解説!
- C#WPFの道#3!Gridの使い方をわかりやすく解説!
- C#WPFの道#4!コントロールの名前の付け方をわかりやすく解説!
- C#WPFの道#5!イベントの定義の仕方をわかりやすく解説!
- C#WPFの道#6!リソースとStaticResourceの定義と使い方をわかりやすく解説!
- C#WPFの道#7!コントロールのスタイル定義のやり方をわかりやすく解説!
- C#WPFの道#8!グループごとのスタイル定義とBasedOnでの継承のやり方!
- C#WPFの道#9!SQLiteの使い方をわかりやすく解説!
- C#WPFの道#10!ListViewの使い方をわかりやすく解説!
- C#WPFの道#11!ListViewのフィルタリングの方法を解説!
- C#WPFの道#12!SQLiteとListViewでマスタ設定画面の作成!
- C#WPFの道#13!Buttonに画像と文字を並べる方法とRepeatButtonとToggleButton
- C#WPFの道#14!CheckBoxとIsThreeState、Indeterminateの使い方
- C#WPFの道#15!RadioButtonの書き方と使い方を解説
- C#WPFの道#16!Expanderの書き方と使い方を解りやすく解説
- C#WPFの道#17!GroupBoxの書き方と使い方を解りやすく解説
- C#WPFの道#18!Slider(スライダー)の書き方と使い方を解りやすく解説
- C#WPFの道#19!ProgressBarの書き方と使い方を解りやすく解説
- C#WPFの道#20!ComboBoxの書き方と使い方を解りやすく解説
- C#WPFの道#21!ListBoxの書き方と使い方を解りやすく解説
- C#WPFの道#22!TabControlの書き方と使い方を解りやすく解説
- C#WPFの道#23!TreeViewの書き方と使い方を解りやすく解説
- C#WPFの道#24!TextBlock,TextBoxの改行と文字の加工を解説
- C#WPFの道#25!Menuの書き方と使い方をわかりやすく解説!
- C#WPFの道#26!ToolBarの書き方と使い方をわかりやすく解説!
- C#WPFの道#27!StatusBarの書き方と使い方をわかりやすく解説!
- C#WPFの道#28!WrapPanelの書き方と使い方をわかりやすく解説!
- C#WPFの道#29!DockPanelの書き方と使い方をわかりやすく解説!
- C#WPFの道#30!Canvasの書き方と使い方をわかりやすく解説!
