Xaml 当没有足够的空间时,为什么栅格会剪裁?

Xaml 当没有足够的空间时,为什么栅格会剪裁?,xaml,layout,uwp,Xaml,Layout,Uwp,考虑以下代码: <Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition Height="100" /> </Grid.RowDefinitions> <Grid Grid.Row="1" Height="100"> <Rectangle

考虑以下代码:

<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,这样内部网格就不会得到它所要求的空间,黄色矩形就会被剪裁。有人知道这是为什么吗?有什么解决办法吗?我知道,理想情况下,不应该为内部网格定义高度,但这是我无法控制的…

不确定幕后会发生什么,但我怀疑,当计算网格的空间且其高度大于可用高度时,将对其进行剪裁-检查每个元素是否适合该行。当高度低于可用高度时,可能会使用此选项,因此负边距可能会起作用。至少我是这么想的。如果你想要更精确的信息,你可以试着去挖掘

但是,如果希望栅格跟随行的高度,我建议使用垂直对齐:



就我个人而言,我不喜欢元素定位的固定边距,可能有更好的方法来安排元素,尽管这取决于您的需要。

不确定幕后会发生什么,但我怀疑,当计算网格的空间且其高度大于可用空间时,然后对其进行剪裁-检查每个元素是否适合该行。当高度低于可用高度时,可能会使用此选项,因此负边距可能会起作用。至少我是这么想的。如果你想要更精确的信息,你可以试着去挖掘

但是,如果希望栅格跟随行的高度,我建议使用垂直对齐:



就个人而言,我不喜欢元素定位的固定边距,可能有更好的方法来安排元素,尽管这取决于您的需要。

找到了一个解决方法;将行高设置为“自动”,并为内部网格提供负的底部边距。仍然没有关于剪辑的线索。找到了一个解决方法;将行高设置为“自动”,并为内部网格提供负的底部边距。但仍然没有关于剪辑的线索。
<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>