具有基于行的RowDefinitions的网格

时间:2018-07-09 10:10:16

标签: wpf wpfgrid

我正在尝试获得可调整边距的图像。图像本身实际上是一条路径,并且位于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垂直(或根据方向水平)拉伸。如果我为网格设置了固定的高度,它确实可以工作,但是在调整大小时会破坏图像的纵横比。我该如何使用它?

这就是我所拥有的:

zero height rows

这就是我想要的:

supposed height rows

编辑:

关于我的问题似乎有些困惑。因此,希望澄清一下,这是在调整StackPanel大小之后的预期结果:

supposed result after resize

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

1 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,一个简单的解决方案可能是修复尺寸并使用 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>