Ответ 1
В WPF эквивалент DockStyle.Fill WinForms:
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>
Кроме того, любая строка или столбец Grid с высотой "Auto" аналогичным образом сжимает его содержимое в этом направлении.
Некоторые примеры контейнеров, которые не сжимают своих детей:
- 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.