WinForms の DockStyle.Fill に相当する WPF は次のとおりです。
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
これはほとんどのコントロールのデフォルトであるため、一般に、WPF コントロールで親コンテナーを埋めるために何もする必要はありません。それらは自動的に行います。これは、子を最小サイズに圧縮しないすべてのコンテナーに当てはまります。
よくある間違い
ここで、期待どおりに動作しないいくつかのよくある間違いについて説明しHorizontalAlignment="Stretch" VerticalAlignment="Stretch"
ます。
1. 明示的な高さまたは幅
よくある間違いの 1 つは、コントロールの幅または高さを明示的に指定することです。したがって、これがある場合:
<Grid>
<Button Content="Why am I not filling the window?" Width="200" Height="20" />
...
</Grid>
Width 属性と Height 属性を削除するだけです。
<Grid>
<Button Content="Ahhh... problem solved" />
...
</Grid>
2. パネルを含むと、コントロールが最小サイズに縮小されます
もう 1 つのよくある間違いは、含まれているパネルがコントロールをできるだけきつく絞ることです。たとえば、垂直の StackPanel は、常にコンテンツを可能な限り垂直方向に縮小します。
<StackPanel>
<Button Content="Why am I squished flat?" />
</StackPanel>
別のパネルに変更すると、準備完了です。
<DockPanel>
<Button Content="I am no longer squished." />
</DockPanel>
また、高さが "Auto" の Grid の行または列は、同様にその方向に内容を絞り込みます。
子をスクイーズしないコンテナーの例を次に示します。
- ContentControls は子をスクイーズしません (これには、Border、Button、CheckBox、ScrollViewer、その他多数が含まれます)。
- 行と列が 1 つのグリッド
- 「*」サイズの行と列のグリッド
- DockPanel が最後の子をスクイーズしない
- TabControl はコンテンツを圧縮しません
子を圧迫するコンテナの例を次に示します。
- StackPanel は Orientation 方向にスクイーズします
- 「自動」サイズの行または列を持つグリッドは、その方向にスクイーズします
- DockPanel は、最後の子を除くすべての子をドック方向にスクイーズします
- TabControl はヘッダーを縮小します (タブに表示されるもの)
3. 明示的な高さまたは幅
次のように、明示的な高さと幅が指定された Grid または DockPanel を何度も目にするのは驚くべきことです。
<Grid Width="200" Height="100">
<Button Content="I am unnecessarily constrainted by my containing panel" />
</Grid>
一般に、パネルに明示的な高さまたは幅を与えることは決してありません。レイアウトの問題を診断するときの最初のステップは、見つかった明示的な高さまたは幅をすべて削除することです。
4. Window が SizeToContent であってはならない場合
SizeToContent を使用すると、コンテンツは最小サイズに縮小されます。多くのアプリケーションで、これは非常に便利で正しい選択です。ただし、コンテンツに「自然な」サイズがない場合は、SizeToContent を省略した方がよいでしょう。