基于内容的 RowDefinitions 网格

Grid with RowDefinitions based on content

我正在尝试制作类似边距可调的图像。图像本身实际上是一条路径,驻留在 StackPanel 中,垂直拉伸。 StackPanel的宽度可以调整,我想保持图像的比例和路径大小与边距的比例。

<StackPanel>
  <Grid HorizontalAlignment="Stretch">
    <Grid.RowDefinitions>
      <RowDefinition Height="0.25*"/>
      <RowDefinition Height="0.5*"/>
      <RowDefinition Height="0.25*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="0.25*"/>
      <ColumnDefinition Width="0.5*"/>
      <ColumnDefinition Width="0.25*"/>
    </Grid.ColumnDefintions>

    <Path Grid.Row="1"
          Grid.Column="1"
          Data="...blabla..."
          Fill="#FF0072C6"
          Stretch="UniformToFill"/>
  </Grid>
</StackPanel>

现在的问题是,即使在网格中绘制了路径对象,第一行和第三行的高度始终为零,而不是根据第二行的高度进行设置。我知道发生这种情况是因为 Grid 驻留在 StackPanel 中,它会忽略自动高度设置,甚至不会让 Grid 垂直拉伸(或水平拉伸,具体取决于方向)。如果我为网格设置固定高度,它确实有效,但在调整大小时会破坏图像的纵横比。我怎样才能让它工作?

这是我的:

这就是我想要的:

编辑:

看来我的问题有点混乱。因此,希望澄清一下,这是调整 StackPanel 大小后的预期结果:

如您所见,整个网格应该像实际图像一样调整大小。网格应保持其纵横比。这与网格内的路径无关。

如果我正确理解了这个问题,一个简单的解决方案可能是固定尺寸并使用 viewbox:

<StackPanel>

<!--The other rows-->

    <Viewbox>
        <Grid Width="100" Height="100">
            <Grid.RowDefinitions>
                <RowDefinition Height="25"/>
                <RowDefinition Height="50"/>
                <RowDefinition Height="25"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="25"/>
                <ColumnDefinition Width="50"/>
                <ColumnDefinition Width="25"/>
            </Grid.ColumnDefinitions>
            <Path Grid.Row="1"  Grid.Column="1"   Data="M8.5,13.5L11,16.5L14.5,12L19,18H5M21,19V5C21,3.89 20.1,3 19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19Z" Fill="Blue" Stretch="Uniform" />
        </Grid>
    </Viewbox>
</StackPanel>