请考虑以下代码:
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="100" />
</Grid.RowDefinitions>
<Grid
Grid.Row="1"
Height="100">
<Rectangle
Fill="Red" />
<Rectangle
Fill="Yellow"
Width="50"
Height="50"
Margin="0,-100,0,0" />
</Grid>
</Grid>
这很好用,黄色矩形的一半显示在红色上方(即叠加上一行中的任何内容)。现在,如果我将RowDefinition的高度更改为99而不是100,那么内部网格不会获得它所要求的空间,则会剪切黄色矩形。有谁知道这是为什么,是否有任何解决方法?我知道理想情况下不应该为内部网格定义高度,但这不在我手中......
答案 0 :(得分:0)
不确定幕后会发生什么,但我怀疑当计算网格空间并且其高度大于可用空间时,它会被剪裁 - 如果它适合,则检查每个元素到了那一排。一旦高度低于可用高度,这可能会被忽略 - 因此负边际可能起作用。至少我是如何思考这一点的。如果您想要更准确的信息,可以尝试挖掘at reference source。
但是,如果您希望网格遵循行的高度 - 我建议使用 VerticalAlignment :
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="100" />
</Grid.RowDefinitions>
<Grid Grid.Row="1" VerticalAlignment="Stretch">
<Rectangle Fill="Red"/>
<Rectangle Fill="Yellow" Width="50" Height="50" Margin="0,-100,0,0" />
</Grid>
</Grid>
就我个人而言,我不喜欢元素定位的固定边距,并且可能有更好的方法来排列元素,但这取决于您的需求。