2011-07-20 16 views
7

Tengo una ventana que tiene un StackPanel, y el StackPanel tiene un ContentControl, que obtiene un UserControl enlazado en tiempo de ejecución.WPF UserControl no está llenando el contenedor primario cuando está enlazado en el tiempo de ejecución

(En MainWindow.xaml)

<StackPanel Margin="6,14,5,6" Grid.Row="1"> 
    <ContentControl Name="WindowContent" Content="{Binding}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" /> 
</StackPanel> 

(En MainWindow.xaml.cs)

WindowContent.Content = new MainWindowView(); 

Quiero que el control de usuario (y de los niños) para llenar el espacio en el StackPanel.

He comprobado que todas las alturas y anchuras están configuradas en Automático, y las Alineadas horizontales/verticales están configuradas en Estirar, y las Alineación de contorno horizontal/vertical también están configuradas en Estirar.

¿Hay algo que me falta? Esto parece una pregunta tonta, ¡pero no puedo hacer que esto funcione!

Gracias

Respuesta

14

El contenedor StackPanel siempre tamaños al tamaño mínimo de su contenido. Creo que quieres usar un Grid en lugar de un StackPanel; Grid intentará usar todo el espacio disponible.

<Grid Margin="6,14,5,6" Grid.Row="1"> 
    <ContentControl Name="WindowContent" Content="{Binding}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" /> 
</Grid> 

Editar: Si desea que el mismo tipo de apilamiento funcionalidad en una cuadrícula, acaba de hacer algo como esto:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
</Grid> 

que haría 2 filas mínimamente tamaño (como un StackPanel) y luego una fila que ocupaba todo el resto del espacio disponible.

+0

Mis botones en el control de usuario se alinean a la parte superior e izquierda para que pareciera que todo el contenedor no estaba estirando. ¡Gracias por la ayuda! – Michele

0

Descubrí que el uso de UniformGrid era una solución más satisfactoria ya que permite un rango dinámico de artículos en el contenedor sin tener que usar un conjunto específico de dimensiones conocidas de antemano. También funciona mejor para una gran cantidad de artículos. fragmento de código en el que usó esto como una solución:

<Grid Name="AmericanFlag" Opacity="{Binding ElementName=AmericanFlagOpacity, Path=Value}"> 
     <Grid.Resources> 
     <Color x:Key="OldGloryRed">#B22234</Color> 
     <Color x:Key="OldGloryWhite">#FFFFFF</Color> 
     <Color x:Key="OldGloryBlue">#3C3B6E</Color> 
     <Style x:Key="RedStripe" TargetType="Border"> 
      <Setter Property="Background"> 
      <Setter.Value> 
       <SolidColorBrush Color="{StaticResource OldGloryRed}"/> 
      </Setter.Value> 
      </Setter> 
     </Style> 
     <Style x:Key="WhiteStripe" TargetType="Border"> 
      <Setter Property="Background"> 
      <Setter.Value> 
       <SolidColorBrush Color="{StaticResource OldGloryWhite}"/> 
      </Setter.Value> 
      </Setter> 
     </Style> 
     <Style x:Key="Star" TargetType="Path"> 
      <Setter Property="Fill"> 
      <Setter.Value> 
       <SolidColorBrush Color="{StaticResource OldGloryWhite}"/> 
      </Setter.Value> 
      </Setter> 
      <Setter Property="Stretch" Value="Uniform"/> 
      <Setter Property="Data" Value="M 9,0 L 7,6 L 0,6 L 6,11 L 4,17 L 9,12 L 14,17 L 12,11 L 18,6 L 11,6 L 9,0"/> 
     </Style> 
     </Grid.Resources> 
     <Grid.RowDefinitions> 
     <RowDefinition Height="7*"/> 
     <RowDefinition Height="6*"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="2*"/> 
     <ColumnDefinition Width="3*"/> 
     </Grid.ColumnDefinitions> 
     <UniformGrid 
     Grid.ColumnSpan="2" 
     Grid.RowSpan="2" 
     Columns="1" 
     Rows="13"> 
     <Border Style="{StaticResource RedStripe}"/> 
     <Border Style="{StaticResource WhiteStripe}"/> 
     <Border Style="{StaticResource RedStripe}"/> 
     <Border Style="{StaticResource WhiteStripe}"/> 
     <Border Style="{StaticResource RedStripe}"/> 
     <Border Style="{StaticResource WhiteStripe}"/> 
     <Border Style="{StaticResource RedStripe}"/> 
     <Border Style="{StaticResource WhiteStripe}"/> 
     <Border Style="{StaticResource RedStripe}"/> 
     <Border Style="{StaticResource WhiteStripe}"/> 
     <Border Style="{StaticResource RedStripe}"/> 
     <Border Style="{StaticResource WhiteStripe}"/> 
     <Border Style="{StaticResource RedStripe}"/> 
     </UniformGrid> 
     <Border> 
     <Border.Background> 
      <SolidColorBrush Color="{StaticResource OldGloryBlue}"/> 
     </Border.Background> 
     <Grid> 
      <Grid.RowDefinitions> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="18*"/> 
      <RowDefinition Height="*"/> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="22*"/> 
      <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
      <UniformGrid 
      Grid.Column="1" 
      Grid.Row="1" 
      Columns="1" 
      Rows="9"> 
      <UniformGrid Columns="6" Rows="1"> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
      </UniformGrid> 
      <Grid> 
       <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="10*"/> 
       <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions> 
       <UniformGrid Grid.Column="1" Columns="5" Rows="1"> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       </UniformGrid> 
      </Grid> 
      <UniformGrid Columns="6" Rows="1"> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
      </UniformGrid> 
      <Grid> 
       <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="10*"/> 
       <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions> 
       <UniformGrid Grid.Column="1" Columns="5" Rows="1"> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       </UniformGrid> 
      </Grid> 
      <UniformGrid Columns="6" Rows="1"> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
      </UniformGrid> 
      <Grid> 
       <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="10*"/> 
       <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions> 
       <UniformGrid Grid.Column="1" Columns="5" Rows="1"> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       </UniformGrid> 
      </Grid> 
      <UniformGrid Columns="6" Rows="1"> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
      </UniformGrid> 
      <Grid> 
       <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="10*"/> 
       <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions> 
       <UniformGrid Grid.Column="1" Columns="5" Rows="1"> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       </UniformGrid> 
      </Grid> 
      <UniformGrid Columns="6" Rows="1"> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
       <Path Style="{StaticResource Star}"/> 
      </UniformGrid> 
      </UniformGrid> 
     </Grid> 
     </Border> 
    </Grid> 
Cuestiones relacionadas