Макет в WPF сильно зависит от родительского контейнера. Например, если вы создаете форму с метками и полями ввода, рассмотрите возможность использования панели «Сетка». Размер элементов управления в WPF по умолчанию изменяется в зависимости от поведения макета их родителя. Вот пример окна с двумя помеченными текстовыми полями и двумя кнопками, которые изменяют размер вместе с окном.
<Window>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Label Content="Contact Name" Grid.Row="0" Grid.Column="0" />
<TextBox Grid.Row="0" Grid.Column="1" />
<Label Content="Contact Location" Grid.Row="1" Grid.Column="0" />
<TextBox Grid.Row="1" Grid.Column="1" />
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"
VerticalAlignment="Bottom" Grid.Row="2" Grid.Column="1">
<Button Content="OK" Width="75" Height="24" Margin="3" />
<Button Content="Cancel" Width="75" Height="24" Margin="3" />
</StackPanel>
</Grid>
</Window>
Или, если вы хотите что-то похожее на адресную строку браузера, вы можете сделать что-то вроде:
<Window>
<DockPanel>
<DockPanel DockPanel.Dock="Top">
<Button Content="Back" DockPanel.Dock="Left" />
<Button Content="Forward" DockPanel.Dock="Left" />
<Button Content="Refresh" DockPanel.Dock="Right" />
<TextBox /> <!-- fill is assumed for last child -->
<DockPanel>
<StatusBar DockPanel.Dock="Bottom" />
<WebBrowser /> <!-- fill is assumed for last child -->
</DockPanel>
</Window>
Обратите внимание, что в приведенном выше примере я вложил две DockPanel. Этого также можно было бы достичь с помощью Grid, но разметка была бы намного более загроможденной. Если вы новичок в WPF, я бы настоятельно рекомендовал поиграть с различными панелями, которые вам доступны. Когда вы узнаете, когда применять конкретную панель к определенному макету, с WPF станет намного проще работать.