2011-07-20 25 views
7

Tôi có một cửa sổ có StackPanel và StackPanel có một ContentControl, được một UserControl ràng buộc với nó tại thời gian chạy.WPF UserControl không làm đầy thùng chứa cha khi bị ràng buộc tại thời gian chạy

(Trong MainWindow.xaml)

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

(Trong MainWindow.xaml.cs)

WindowContent.Content = new MainWindowView(); 

Tôi muốn UserControl (và đó là trẻ em) để lấp đầy khoảng trống trong StackPanel.

Tôi đã kiểm tra tất cả các Chiều cao và Chiều rộng được đặt thành Tự động, và Ngang/VerticalAlignments được đặt thành Căng, và Ngang/VerticalContentAlignments cũng được đặt thành Căng.

Có điều gì tôi thiếu không? Điều này có vẻ như một câu hỏi ngớ ngẩn, nhưng tôi không thể làm điều này!

Cảm ơn

Trả lời

14

Container StackPanel luôn kích thước kích thước tối thiểu nội dung của hãng. Tôi tin rằng bạn muốn sử dụng một Lưới hơn là một StackPanel; Lưới sẽ cố gắng sử dụng tất cả không gian có sẵn.

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

Edit: Nếu bạn muốn cùng một loại xếp chồng chức năng trong một lưới điện, chỉ cần làm một cái gì đó như thế này:

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

Điều đó sẽ làm cho 2 hàng tối thiểu kích thước (như một StackPanel) và sau đó một hàng chiếm toàn bộ phần còn lại của không gian còn trống.

+0

Các nút của tôi trong UserControl được căn chỉnh ở trên cùng và bên trái để trông giống như toàn bộ vùng chứa không được kéo dài. Cảm ơn đã giúp đỡ! – Michele

0

Tôi thấy rằng việc sử dụng UniformGrid là giải pháp thỏa đáng hơn vì nó cho phép một loạt các mục động trong vùng chứa mà không phải sử dụng một bộ kích thước cụ thể đã biết trước. Nó cũng hoạt động tốt hơn cho số lượng lớn các mục. Đoạn mã mà tôi đã sử dụng làm giải pháp:

<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> 
Các vấn đề liên quan