0

我正在尝试获得类似于可调整边距的图像。图像本身实际上是一条路径,位于 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 大小后所需的结果:

调整大小后的假设结果

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

4

1 回答 1

1

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

<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>
于 2018-07-09T10:22:48.833 回答