我有以下代码:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0" TextBlock.Foreground="Blue" ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="test" Grid.Row="0" />
<TextBlock Text="test" Grid.Row="2" />
</Grid>
<Grid Grid.Row="1" TextBlock.Foreground="Red" ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="test" Grid.Row="0"/>
<TextBlock Text="test" Grid.Row="2"/>
</Grid>
</Grid>
它只是两个相等的网格,有三行,所有三个应该具有相同的大小(每个都在它自己的网格中,即)。
底部网格,包含在父行中,高度为&#34; *&#34;表现如预期。无论放入什么内容,每行的大小都相同。
但是包含在高度为Auto的行中的顶部网格似乎丢弃了Height =&#34; *&#34;,并且表现得好像它们具有Height =&#34; Auto&#34;。第一行和第三行准确地获得了他们要求的高度,而第二行(空行)的高度恰好为0.这是正常的行为吗?如果是这样,为什么会这样呢?
这是它出现的方式:
这就是我期望它的工作方式:
答案 0 :(得分:4)
此行为是预期的。 Height="*"
表示所有行都将共享均匀可用的空间
该值表示为可用空间的加权比例
当您将父行高度设置为auto时,意味着子Grid
不再垂直拉伸,因此没有可用空间来共享,因此行将只占用所需的空间。就像你设置VerticalAlignment="Top"
一样。
您可以使用顶部Grid
上的SharedSizeGroup
来实现您的目标。在这种情况下,所有行都属于同一个组,并且所有行都将共享相同的高度
<Grid Grid.Row="0" IsSharedSizeScope="True" TextBlock.Foreground="Blue" ShowGridLines="True" >
<Grid.RowDefinitions>
<RowDefinition SharedSizeGroup="CommonRow"/>
<RowDefinition SharedSizeGroup="CommonRow"/>
<RowDefinition SharedSizeGroup="CommonRow"/>
</Grid.RowDefinitions>
<TextBlock Text="test" Grid.Row="0" />
<TextBlock Text="test" Grid.Row="2" />
</Grid>
答案 1 :(得分:2)
它表现正常。
当您设置Height="*"
表示填充其余空格时,Height="Auto"
表示适合所有内部控件。
所以第一行适合你拥有的只有两个的所有控件,因为没有Height
属性设置为第一个内部网格或TextBlocks,它只需要等于yourFirstTextBlock.Height + yourSecondTextBlock.Height
的高度。