2009-06-23 9 views
12

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> 

Respuesta

12

Ha intentado ...

  1. Margen de ajuste = "0"
  2. La fabricación de su control, el último hijo de DockPanel con LastChildFill = "true"
+2

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 –

+0

Cuando hago eso, el control se llena, pero se superpone a mi barra de estado –

Cuestiones relacionadas