en una ventana de 630 x 400, estoy cargando elementos no XAML:¿Cómo hacer que UserControl se estire para llenar el espacio asignado?
- menú en la parte superior
- control dinámico de usuario
- pie de página en la parte inferior
El problema es que cuando Establecí el fondo del UserControl, , el color solo baja hasta el contenido. Quiero que el fondo del UserControl cubra todo el UserControl, por supuesto. He intentado:
- VerticalContentAlignment = "estiramiento" en el control de usuario
- VerticalAlignment = "estiramiento" en el control de usuario
- VerticalContentAlignment = "estiramiento" en el MainView
- V erticalAlignment = "estiramiento" en el MainView
Pero el color todavía se niega a bajar. No quiero establecer un ancho fijo ya que el usuario puede aumentar el tamaño de la aplicación.
¿Cómo puedo obtener el color de fondo de UserControl para que ocupe toda el área del UserControl en lugar de solo el área de su contenido?
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>
Ok, que era muy agradable. Ni siquiera iba a probar tu sugerencia porque pensé "pero no quiero que mi control de contenido sea el último hijo, sino el penúltimo". Lo intenté de todos modos y funciona. La razón es que el "último hijo" de un DockPanel no es el niño "más hacia la parte inferior" sino el "último enumerado en el XAML". Muy bueno saber –
Cuando hago eso, el control se llena, pero se superpone a mi barra de estado –