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>
Просто удалите атрибуты ширины и высоты:
<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.