在运行时绑定时,WPF UserControl不填充父容器

时间:2011-07-20 19:51:11

标签: wpf

我有一个具有StackPanel的窗口,StackPanel有一个ContentControl,它在运行时获取绑定到它的UserControl。

(在MainWindow.xaml中)

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

(在MainWindow.xaml.cs中)

WindowContent.Content = new MainWindowView();

我希望UserControl(及其子代)填满StackPanel中的空间。

我已检查所有高度和宽度都设置为“自动”,“水平/垂直对齐”设置为“拉伸”,“水平/垂直对齐”也设置为“拉伸”。

有什么我想念的吗? 这似乎是一个愚蠢的问题,但我不能让这个工作!

由于

2 个答案:

答案 0 :(得分:18)

StackPanel容器的大小始终为其内容的最小大小。我相信你想使用Grid而不是StackPanel;网格将尝试使用所有可用空间。

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

编辑:如果您想在网格中使用相同类型的堆叠功能,请执行以下操作:

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

这将产生2个最小尺寸的行(如StackPanel),然后占用所有剩余可用空间的行。

答案 1 :(得分:0)

我发现使用UniformGrid是一个更令人满意的解决方案,因为它允许容器中的动态范围的项目,而无需使用事先已知的特定维度集。它对大量物品也有效。代码片段,我将其用作解决方案:

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