我有一个包含多列的 DataGrid。在其中一个内列中,我正在显示图像。这个图像需要旋转,所以我TransformGroup
根据需要使用了 a 来缩放和旋转图像。
如果我不旋转,使用以下 XAML,图像会正常显示。当我更改图像列的宽度时,图像会按预期缩放。它保持在其列的范围内:
<GridViewColumn Header="Image" Width="200" x:Name="image_column">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding Path=ImagePath}" Margin="5">
</Image>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
现在,如果我尝试在图像列中根据需要旋转图像,事情就会变得很奇怪。列仍然与未旋转的图像宽度相关联,而行高与未旋转的图像高度相关联。该图像还侵入了其左侧邻居的空间。这是我尝试过的一种 XAML 变体:
<GridViewColumn Header="Image" Width="200" x:Name="image_column">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding Path=ImagePath}" Margin="5">
<Image.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="0.8" ScaleY="0.8" />
<RotateTransform Angle="90" CenterX="0" CenterY="0" />
<TranslateTransform X="{Binding ElementName=image_column, Path=Width}" />
</TransformGroup>
</Image.RenderTransform>
</Image>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
上面的 TranslateTransform 是一个完整的技巧,至少使图像的右边缘与其列的右边缘对齐。
我试图添加一个 Viewbox,认为它会按照我想要的方式缩放,并在其中旋转图像,但这不起作用。
谁能告诉我我在这里根本缺少什么,并提供有关如何解决解决方案的提示?此时我唯一的想法是在显示之前旋转图像并保存到磁盘。