チュートリアル : 動的レイアウトの構築
動的配置では、親要素を基準として配置方法と折り返し方法を指定することによって子要素を配置します。 また、コンテンツが拡大されたときにウィンドウやコントロールが自動的に拡張されるように設定することもできます。 詳細については、「絶対配置と動的配置によるレイアウト」を参照してください。
WPF Designer for Visual Studio には、動的配置をサポートする Panel コントロールが数多く用意されています。 パネル コントロールを別のパネル コントロールの子コントロールとして追加することにより、複数のパネル コントロールを組み合わせることができます。 以下のパネル コントロールを使用して、アプリケーション内で要素を動的に配置することができます。
重要
可能な限り動的レイアウトを使用することをお勧めします。 動的レイアウトは、最も柔軟性が高く、ローカリゼーションなどのコンテンツの変更に適応でき、エンド ユーザーも自らの環境を最も高いレベルで制御できます。 絶対レイアウトの例については、「チュートリアル : 絶対配置に基づくレイアウトの構築」を参照してください。
このチュートリアルでは次のタスクを行います。
WPF アプリケーションを作成する。
既定の Grid パネル コントロールを構成する。
パネルにコントロールを追加する。
レイアウトをテストする。
最終的なアプリケーションを次の図に示します。
注意
実際に画面に表示されるダイアログ ボックスとメニュー コマンドは、アクティブな設定またはエディションによっては、ヘルプの説明と異なる場合があります。 設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。 詳細については、「設定の操作」を参照してください。
必須コンポーネント
このチュートリアルを実行するには、次のコンポーネントが必要です。
- Visual Studio 2010
プロジェクトの作成
まず、アプリケーションのプロジェクトを作成します。
プロジェクトを作成するには
Visual Basic または Visual C# で DynamicLayout という名前の新しい WPF アプリケーション プロジェクトを作成します。 詳細については、「方法 : 新しい WPF アプリケーション プロジェクトを作成する」を参照してください。
注意
このチュートリアルではコードは作成しません。 プロジェクト用に選択した言語がアプリケーションの分離コード ページで使用される言語となります。
WPF デザイナーで MainWindow.xaml が開きます。
デザイン ビューでウィンドウを選択します。 詳細については、「方法 : デザイン画面上で要素を選択して移動する」を参照してください。
[プロパティ] ウィンドウで、Window に対して次のプロパティを設定します。
プロパティ
値
Width
400
Height
200
SizeToContent
WidthAndHeight
ヒント
サイズ変更ハンドルを使用して、デザイン ビューでウィンドウのサイズを変更することもできます。
[ファイル] メニューの [すべてを保存] をクリックします。
既定のグリッド パネル コントロールの構成
既定では、新しい WPF アプリケーションには Grid パネルが配置された Window が含まれています。 この手順では、グリッドに 4 つの行と列を追加します。 各列の幅を * に設定することにより、与えられた幅を 4 つの列として均等に分割します。 3 つの行については、コンテンツに合わせてサイズが調整されるように、高さを Auto に設定します。 1 つの行では、残ったスペースを使用するように高さを * に設定します。
パネル コントロールを追加するには
デザイン ビューでグリッドを選択します。
(省略可能) [プロパティ] ウィンドウで ShowGridLines プロパティを見つけ、そのチェック ボックスをオンにします。
アプリケーションを実行すると、ウィンドウにグリッド線が表示されます。 グリッド線はデバッグには役立ちますが、実行コードでは ShowGridLines プロパティのチェック ボックスをオフにしてください。
[プロパティ] ウィンドウで ColumnDefinitions プロパティを見つけ、プロパティの値列の省略記号ボタンをクリックします。
[コレクション エディター] ダイアログ ボックスが表示されます。
[追加] を 4 回クリックして、4 つの列を追加します。
最初の行の Width プロパティを Auto に設定します。
2 つ目の行の Width プロパティを * に設定します。
3 つ目の行の Width プロパティを Auto に設定します。
4 つ目の行の Width プロパティを Auto に設定します。
[OK] をクリックして [コレクション エディター] を閉じ、WPF デザイナーに戻ります。
グリッドには 4 つの列がありますが、現在は 1 つしか表示されていません。 Width プロパティを Auto に設定した列は、コンテンツが含まれていないため、一時的に非表示となっています。 このチュートリアルでは、このままで問題ありません。 これ以降、このような動作を回避するには、作業中はスター (アスタリスク) によるサイズ変更を使用し、作業の終了時に Auto に変更します。
[プロパティ] ウィンドウで RowDefinitions プロパティを見つけ、プロパティの値列の省略記号ボタンをクリックします。
[コレクション エディター] ダイアログ ボックスが表示されます。
[追加] を 4 回クリックして、4 つの行を追加します。
最初の行の Height プロパティを Auto に設定します。
2 つ目の行の Height プロパティを Auto に設定します。
3 つ目の行の Height プロパティを * に設定します。
4 つ目の行の Height プロパティを Auto に設定します。
[OK] をクリックして [コレクション エディター] を閉じ、WPF デザイナーに戻ります。
グリッドには 4 つの行がありますが、現在は 1 つしか表示されていません。 Height プロパティを Auto に設定した行は、コンテンツが含まれていないため、一時的に非表示となっています。 このチュートリアルでは、このままで問題ありません。 これ以降、このような動作を回避するには、作業中はスター (アスタリスク) によるサイズ変更を使用し、作業の終了時に Auto に変更します。
[ファイル] メニューの [すべてを保存] をクリックします。
パネルへのコントロールの追加
次に、パネルにコントロールを追加し、Grid の添付プロパティである Column と Row を使用してコントロールを動的に配置します。
パネルにコントロールを追加するには
[プロパティ] ウィンドウで、Label に対して次のプロパティを設定します。
プロパティ
値
Content
Name:
Grid.Column
0
Grid.ColumnSpan
1
Grid.Row
0
Grid.RowSpan
1
Width
Auto
Height
23
HorizontalAlignment
Stretch
VerticalAlignment
Top
Margin
20,20,10,10
[プロパティ] ウィンドウで、Label に対して次のプロパティを設定します。
プロパティ
値
Content
Password:
Grid.Column
0
Grid.ColumnSpan
1
Grid.Row
1
Grid.RowSpan
1
Width
Auto
Height
23
HorizontalAlignment
Stretch
VerticalAlignment
Top
Margin
20,10,10,10
[プロパティ] ウィンドウで、TextBox に対して次のプロパティを設定します。
プロパティ
値
Grid.Column
1
Grid.ColumnSpan
3
Grid.Row
0
Grid.RowSpan
1
Width
Auto
Height
Auto
HorizontalAlignment
Stretch
VerticalAlignment
Stretch
Margin
10,20,20,10
[プロパティ] ウィンドウで、TextBox に対して次のプロパティを設定します。
プロパティ
値
Grid.Column
1
Grid.ColumnSpan
3
Grid.Row
1
Grid.RowSpan
1
Width
Auto
Height
Auto
HorizontalAlignment
Stretch
VerticalAlignment
Stretch
Margin
10,10,20,10
[プロパティ] ウィンドウで、Button に対して次のプロパティを設定します。
プロパティ
値
Content
[OK]
Grid.Column
2
Grid.ColumnSpan
1
Grid.Row
3
Grid.RowSpan
1
Width
75
Height
23
HorizontalAlignment
Stretch
VerticalAlignment
Stretch
Margin
10,10,6,20
[プロパティ] ウィンドウで、Button に対して次のプロパティを設定します。
プロパティ
値
Content
Cancel
Grid.Column
3
Grid.ColumnSpan
1
Grid.Row
3
Grid.RowSpan
1
Width
75
Height
23
HorizontalAlignment
Stretch
VerticalAlignment
Stretch
Margin
6,10,20,20
[ファイル] メニューの [すべてを保存] をクリックします。
レイアウトのテスト
最後に、アプリケーションを実行し、ユーザーがウィンドウのサイズを変更した場合やコントロールのコンテンツが拡大して入りきらなくなった場合にレイアウトが動的に変更されることを確認します。
レイアウトをテストするには
[デバッグ] メニューの [デバッグ開始] をクリックします。
アプリケーションが起動し、ウィンドウが表示されます。
[名前] ボックスがいっぱいになるまで任意の文字を入力します。 テキスト ボックスの右端に達すると、テキストのサイズに合わせてテキスト ボックスとウィンドウが拡張されます。
ウィンドウを閉じます。
[デバッグ] メニューの [デバッグ開始] をクリックします。
アプリケーションが起動し、ウィンドウが表示されます。
ウィンドウのサイズを垂直方向および水平方向に変更します。
拡大した領域を使用して各列が均等に拡張されます。 拡張された列のサイズに合わせてテキスト ボックスが引き延ばされます。 3 つの行の高さは変わらず、4 つ目の行だけが全体的な領域の拡大に合わせて拡張されます。
ウィンドウを閉じます。
デザイン ビューで Name ラベルを選択します。
[プロパティ] ウィンドウで、Content プロパティを「ここに氏名を入力してください」に変更します。
デザイン ビューで、テキストの長さに合わせて Name ラベルが拡張されます。
[デバッグ] メニューの [デバッグ開始] をクリックします。
アプリケーションが起動し、ウィンドウが表示されます。 ラベル コントロールに長いテキストが表示されます。
ウィンドウを閉じます。
チュートリアルの完了
完成した MainWindow.xaml ファイルを次に示します。
<Window x:Class="MainWindow"
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="200" Width="400" SizeToContent="WidthAndHeight">
<Grid ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Grid.Row="0" Margin="20,20,10,10" Width="Auto" Height="23" HorizontalAlignment="Stretch" VerticalAlignment="Top" Name="Label1">Name:</Label>
<Label Grid.Column="0" Grid.Row="1" Margin="20,10,10,10" Width="Auto" Height="23" HorizontalAlignment="Stretch" VerticalAlignment="Top" Name="Label2">Password:</Label>
<TextBox Grid.Column="1" Grid.Row="0" Margin="10,20,20,10" Grid.ColumnSpan="3" Height="Auto" VerticalAlignment="Stretch" Name="TextBox1" />
<TextBox Grid.Column="1" Grid.Row="1" Margin="10,10,20,10" Grid.ColumnSpan="3" Name="TextBox2" />
<Button Grid.Column="2" Grid.Row="3" Margin="10,10,6,20" Width="75" Height="23" HorizontalAlignment="Stretch" Name="Button1">OK</Button>
<Button Grid.Column="3" Grid.Row="3" Margin="6,10,20,20" Width="75" Height="23" Name="Button2">Cancel</Button>
</Grid>
</Window>
次の手順
このチュートリアルで使用した Grid パネルの代わりに以下のパネルを使用することにより、動的レイアウトのさまざまな効果を試すことができます。
参照
処理手順
チュートリアル : WPF デザイナーによるサイズ変更可能なアプリケーションの作成