Как заставить UserControl растягиваться, чтобы заполнить отведенное пространство?

В окне 630 x 400 я загружаю туда элементы XAML:

  • меню вверху
  • динамический пользовательский контроль
  • нижний колонтитул внизу

Проблема в том, что когда я устанавливаю фон для UserControl, цвет уменьшается только до содержимого. Я хочу, чтобы фон UserControl, конечно же, охватывал весь UserControl. Я пробовал:

  • VerticalContentAlignment = "Растянуть" в UserControl
  • VerticalAlignment = "Растянуть" в UserControl
  • VerticalContentAlignment = "Растянуть" в MainView
  • VerticalAlignment = "Растянуть" в MainView

Но цвет все равно не тускнеет. Я не хочу устанавливать фиксированную ширину, поскольку пользователь может увеличивать размер приложения.

Как я могу заставить цвет фона моего UserControl заполнять всю область UserControl, а не только область его содержимого?

PageItemOptionsView.xaml:

<UserControl x:Class="TestMenu234.Views.PageItemOptionsView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             VerticalContentAlignment="Stretch"
             VerticalAlignment="Stretch"
             Background="#ddd">
    <StackPanel Margin="10">
        <TextBlock Text="This is the options area."/>
        <Button Content="Click to go to the Manage Customers page."
                    Width="200"/>
    </StackPanel>
</UserControl>

MainView.xaml:

<Window x:Class="TestMenu234.Views.MainView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:c="clr-namespace:TestMenu234.Commands"
    xmlns:vm="clr-namespace:TestMenu234.ViewModels"
    xmlns:v="clr-namespace:TestMenu234.Views"
    Title="Main Window" Height="400" Width="630" MinWidth="630">

...

    <DockPanel LastChildFill="False">

        <Menu DockPanel.Dock="Top">
            <MenuItem 
                Header="Pages" ItemsSource="{Binding AllPageItemViewModels}"
                      ItemTemplate="{StaticResource CodeGenerationMenuTemplate}"/>
        </Menu>

        <ContentControl
            DockPanel.Dock="Top"
            VerticalAlignment="Stretch"
            VerticalContentAlignment="Stretch"
            Content="{Binding CurrentPageItemViewModel}"/>

        <Border DockPanel.Dock="Bottom" Padding="5 5 5 0" Background="#eee">
            <Grid Background="#eee">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" MinWidth="300"/>
                    <ColumnDefinition Width="200"/>
                    <ColumnDefinition Width="100"/>
                </Grid.ColumnDefinitions>
                <Slider 
                Grid.Column="0"
                HorizontalAlignment="Left"
                Value="{Binding CurrentPageItemViewModelIndex}"
                Width="300"
                Minimum="0"
                Maximum="{Binding HighestPageItemIndex}"/>

                <TextBlock Grid.Column="1" 
                           HorizontalAlignment="Center" FontWeight="Bold" 
                           Text="{Binding CurrentPageItemViewModelTitle}"/>

                <DockPanel Grid.Column="2" Margin="0 0 0 5" LastChildFill="False">
                    <Button
                    Margin="3 0 0 0"
                    DockPanel.Dock="Right"
                HorizontalAlignment="Right"
                Content="Next" Command="{Binding NextPageCommand}"/>
                    <Button
                    DockPanel.Dock="Right"
                Content="Prev" Command="{Binding PreviousPageCommand}"/>
                </DockPanel>
            </Grid>
        </Border>

    </DockPanel>
</Window>

person Edward Tanguay    schedule 23.06.2009    source источник


Ответы (1)


Ты пытался...

  1. Установка маржи = "0"
  2. Сделайте ваш элемент управления последним дочерним элементом DockPanel с помощью LastChildFill = "True"
person Fenton    schedule 23.06.2009
comment
Хорошо, это было очень мило. Я даже не собирался пробовать ваше предложение, потому что подумал, но я хочу, чтобы мой элемент управления контентом был не последним дочерним элементом, а предпоследним дочерним элементом. Я все равно попробовал, и он работает. Причина в том, что последний дочерний элемент DockPanel - это не самый дальний дочерний элемент в нижней части, а последний дочерний элемент, указанный в XAML. Очень полезно знать. - person Edward Tanguay; 23.06.2009
comment
Когда я это сделаю, элемент управления заполняется "да", но перекрывает мою строку состояния. - person Stephen York; 13.11.2017