【问题标题】:WPF UserControl is not filling parent container when bound at runtimeWPF UserControl 在运行时绑定时未填充父容器
【发布时间】:2015-07-05 01:37:27
【问题描述】:

我有一个带有 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 中的空间。

我检查了所有的高度和宽度都设置为自动,水平/垂直对齐设置为拉伸,水平/垂直内容对齐也设置为拉伸。

我有什么遗漏吗? 这似乎是一个愚蠢的问题,但我无法让它工作!

谢谢

【问题讨论】:

    标签: wpf


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我在 UserControl 中的按钮与顶部和左侧对齐,因此看起来整个容器没有拉伸。感谢您的帮助!
    • StackPanel 容器的大小始终为其内容的最小大小 +1。谢谢!
    【解决方案2】:

    我发现使用 UniformGrid 是一个更令人满意的解决方案,因为它允许容器中的项目动态范围,而无需使用预先已知的一组特定维度。它也适用于大量项目。代码 sn-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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多