2010-09-14 25 views
13

Tôi có một phong cách cho một ContentControl mà tôi muốn sử dụng ở những nơi mà tôi hiện đang có đường viền. Khi tôi sử dụng điều này, các điều khiển con sẽ không kéo dài để lấp đầy và chỉ mất một lượng nhỏ không gian. Tôi đã thử áp dụng HorizontalAlignment = "Stretch" cho mọi thứ, nhưng nó không hoạt động. Chuyện gì vậy?Nội dung kiểm soát nội dung kích thước để điền vào 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> 

...

Trước (hoạt động tốt):

<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> 

Sau (thay thế biên giới với 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> 

Trả lời

45

Bạn cần phải đặt HorizontalContentAlignment="Stretch" cài đặt VerticalContentAlignment="Stretch" ở bên ngoài của bạn ContentControl.

Hành vi mặc định là NOT kéo dài nội dung của vùng chứa.

ví dụ: dòng đầu tiên phải là:

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

Bố cục Silverlight là một tác phẩm nghệ thuật đen. Cảm ơn. –

+0

+1 cho nghệ thuật đen! – dFlat

+0

+5 để có câu trả lời hay, –