为什么没有足够的空间时网格剪辑?

时间:2017-05-23 08:44:12

标签: xaml layout uwp

请考虑以下代码:

<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,那么内部网格不会获得它所要求的空间,则会剪切黄色矩形。有谁知道这是为什么,是否有任何解决方法?我知道理想情况下不应该为内部网格定义高度,但这不在我手中......

1 个答案:

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

就我个人而言,我不喜欢元素定位的固定边距,并且可能有更好的方法来排列元素,但这取决于您的需求。