2010-09-14 34 views
13

J'ai un style pour un ContentControl que je veux utiliser dans les endroits où j'ai actuellement une bordure. Lorsque j'utilise ceci, les contrôles enfants ne s'étirent pas pour remplir et ne prennent qu'une petite quantité d'espace. J'ai essayé d'appliquer HorizontalAlignment = "Stretch" à tout, mais cela ne fonctionne pas. Qu'est-ce qui ne va pas?Dimensionnement du contenu de contrôle du contenu à remplir dans Silverlight 4

<Style x:Key="GradientPanel" TargetType="ContentControl"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ContentControl"> 
       <Grid HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"> 
        <Rectangle RadiusY="10" RadiusX="10" Stroke="Black" StrokeThickness="0"> 
         <Rectangle.Effect> 
          <DropShadowEffect Opacity="0.56" ShadowDepth="1" BlurRadius="3" /> 
         </Rectangle.Effect> 
         <Rectangle.Fill> 
          <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
           <GradientStop Color="#FFE1EAF3"/> 
           <GradientStop Color="White" Offset="1"/> 
           <GradientStop Color="#FFFAFBFD" Offset="1"/> 
          </LinearGradientBrush> 
         </Rectangle.Fill> 
        </Rectangle> 
        <ContentPresenter Margin="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

...

Avant (fonctionne très bien):

<Border Style="{StaticResource SearchContainerBorder}" > 
    <Grid Margin="5"> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="Auto" /> 
     </Grid.ColumnDefinitions> 
     <ToggleButton Style="{StaticResource ToggleButtonExpanderStyle}" Grid.Row="0" Grid.Column="1" Height="25" Width ="25" HorizontalAlignment="Center" VerticalAlignment="Top" /> 
     <ContentControl Grid.Row="0" HorizontalContentAlignment="Stretch" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
    </Grid> 
</Border> 

Après (remplacer la frontière avec ContentControl):

<ContentControl Style="{StaticResource GradPanel}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
    <Grid Margin="5"> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="Auto" /> 
     </Grid.ColumnDefinitions> 
     <ToggleButton Style="{StaticResource ToggleButtonExpanderStyle}" Grid.Row="0" Grid.Column="1" Height="25" Width ="25" HorizontalAlignment="Center" VerticalAlignment="Top" /> 
     <ContentControl Grid.Row="0" HorizontalContentAlignment="Stretch" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
    </Grid> 
</ContentControl> 

Répondre

45

Vous devez définir la HorizontalContentAlignment="Stretch"et les paramètres VerticalContentAlignment="Stretch" sur votre extérieur ContentControl.

Le comportement par défaut est pas étirer le contenu d'un conteneur.

par exemple. la première ligne doit être:

<ContentControl Style="{StaticResource GradPanel}" 
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Stretch" 
       HorizontalContentAlignment="Stretch" 
       VerticalContentAlignment="Stretch" > 
+11

La mise en page Silverlight est un art noir. Merci. –

+0

+1 pour l'art noir! – dFlat

+0

+5 pour une bonne réponse –