我正在尝试获得可调整边距的图像。图像本身实际上是一条路径,并且位于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大小之后的预期结果:
如您所见,整个网格应该像实际图像一样调整大小。网格应保持其纵横比。这与网格内的路径无关。
答案 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>