WPF-еквівалент WinForms 'DockStyle.Fill:
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Це значення за замовчуванням для майже елементів керування, тому загалом вам не потрібно взагалі нічого робити, щоб елемент керування WPF заповнював свій батьківський контейнер : вони роблять це автоматично. Це справедливо для всіх контейнерів, які не стискають своїх дітей до мінімальних розмірів.
Поширені помилки
Зараз я поясню кілька типових помилок, які заважають HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
працювати належним чином.
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. Містить панель стискає управління до мінімальних розмірів
Ще однією поширеною помилкою є те, що панель, що містить панель, стискає ваш контроль так сильно, наскільки це можливо. Наприклад, вертикальний 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.