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>
幅と高さの属性を削除するだけです。
<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>
また、高さが「自動」であるグリッドの行または列も、同様にその方向にコンテンツを圧縮します。
子供を圧迫しないコンテナの例は次のとおりです。
- ContentControlsが子を圧迫することはありません(これには、Border、Button、CheckBox、ScrollViewer、およびその他の多くが含まれます)
- 単一の行と列を持つグリッド
- 「*」サイズの行と列のグリッド
- DockPanelは最後の子を圧迫しません
- TabControlはそのコンテンツを絞り込みません
子を圧迫するコンテナの例は次のとおりです。
- StackPanelがその向き方向に圧迫する
- 「自動」サイズの行または列がその方向に圧縮されたグリッド
- DockPanelは、最後の子以外のすべてをドック方向に圧縮します。
- TabControlはそのヘッダーを圧縮します(タブに表示される内容)
3.さらに明確な高さまたは幅
次のように、GridまたはDockPanelが明示的な高さと幅を与えられた回数を見るのは驚くべきことです。
<Grid Width="200" Height="100">
<Button Content="I am unnecessarily constrainted by my containing panel" />
</Grid>
一般に、どのパネルにも明示的な高さまたは幅を与えたくありません。レイアウトの問題を診断するときの最初のステップは、見つけたすべての明示的な高さまたは幅を削除することです。
4.本来あるべきではないウィンドウがSizeToContentである
SizeToContentを使用すると、コンテンツは最小サイズに圧縮されます。多くのアプリケーションでは、これは非常に便利で正しい選択です。ただし、コンテンツに「自然な」サイズがない場合は、SizeToContentを省略できます。