【问题标题】:Grid RowDefinintion fixed Height ignoredGrid RowDefinintion 固定高度被忽略
【发布时间】:2015-03-21 02:03:05
【问题描述】:

我有一个简单的两行网格,第一行具有固定高度。在里面,我有一个 RowSpan="2" 的元素,在顶部还有另一个元素,它应该只位于第一行:

        <Grid Background="Lime">
            <Grid.RowDefinitions>
                <RowDefinition Height="20"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>

            <Rectangle Grid.RowSpan="2" Height="50" Fill="Blue"/>

            <TextBlock Grid.Row="0" Text="Foo" VerticalAlignment="Center" Background="Red"/>
        </Grid>

但是,第一行的实际高度只是忽略了高度设置,比预期的要大得多。

这是网格中的错误吗?我该如何解决这个问题?

【问题讨论】:

  • 没有错误,按预期工作,“第一列的实际高度”是什么意思?我在代码中没有看到任何列...尝试使用此 sn-p 绘制您想要获得的布局,这将有助于理解问题
  • 对不起,我的意思是“第一行”(已更正)。我希望第一行是20像素高,但它是35(取决于矩形的高度,在实际情况下并不固定)

标签: wpf grid-layout rowdefinition


【解决方案1】:

我想你想要这样的东西:

<Grid Background="Lime">
    <Grid.RowDefinitions>
        <RowDefinition Height="20"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Rectangle Grid.RowSpan="2" Height="50" VerticalAlignment="Center" Fill="Blue"/>
    <TextBlock Grid.Row="0" Text="Foo" VerticalAlignment="Center" Background="Red"/>
</Grid>

我不确定有一个 RowSpan 覆盖 RowDefinitionHeight="*" 是否可行。

【讨论】:

  • 谢谢,但在我的实际应用程序中,带有RowSpan="2" 的项目的高度不是固定的(取决于其实际内容)。所以这在我的情况下不起作用。
  • 啊,然后尝试"Auto" 第二个RowDefinition(更新答案以匹配)...正如另一位评论者所说,这将有助于查看预期的布局,但我认为这可能会得到你离得更近了。
  • 不,它使第二列折叠,使第一列具有整个高度...
【解决方案2】:

我也尝试了几次,但它不起作用。我认为这是设计使然。您不能将矩形作为网格的父级放在 xaml 中吗?

【讨论】:

    【解决方案3】:

    这个方法好像不行 相反,我只是使用VerticalAlignment 属性将TextBlock 移动到顶部,并完全删除了RowDefinitions:

            <Grid Background="Lime">
                <Rectangle Height="50" Fill="Blue"/>
                <TextBlock Grid.Row="0" Text="Foo" VerticalAlignment="Top" Background="Red" Height="20"/>
            </Grid>
    

    【讨论】:

      【解决方案4】:

      在这种情况下,您必须使用 VerticalAlignment 进行拉伸以填充 RowDefinition 的高度。

      <Grid Background="Lime">
          <Grid.RowDefinitions>
              <RowDefinition Height="20"/>
              <RowDefinition Height="*"/>
          </Grid.RowDefinitions>
      
          <Rectangle Grid.RowSpan="2" Height="50" Fill="Blue"/>
      
          <TextBlock Name="texto" Grid.Row="0" Text="Foo" VerticalAlignment="Stretch" Background="Red"/>
      </Grid>  
      

      通过这种方式,您将看到您的 TextBox 被拉伸到行高。

      【讨论】:

        猜你喜欢
        • 2021-11-10
        • 1970-01-01
        • 2017-02-24
        • 1970-01-01
        • 1970-01-01
        • 2015-12-20
        • 2012-11-06
        • 2014-06-11
        • 1970-01-01
        相关资源
        最近更新 更多