WPF ListView中图像的奇怪转换行为
我有一个多栏的数据网格。在其中一个内列中,我显示了一个图像。这个图像需要旋转,所以我使用了WPF ListView中图像的奇怪转换行为,wpf,image,listview,rotatetransform,transformgroup,Wpf,Image,Listview,Rotatetransform,Transformgroup,我有一个多栏的数据网格。在其中一个内列中,我显示了一个图像。这个图像需要旋转,所以我使用了TransformGroup来根据需要缩放和旋转图像 如果使用以下XAML不旋转,图像将正常显示。当我更改图像列的宽度时,图像将按预期缩放。它位于其列的范围内: <GridViewColumn Header="Image" Width="200" x:Name="image_column"> <GridViewColumn.CellTemplate> <
TransformGroup
来根据需要缩放和旋转图像
如果使用以下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是一个完整的hack,至少可以使图像的右边缘与其列的右边缘对齐
我试着添加一个视图框,认为它可以按我想要的方式缩放,其中旋转了图像,但这不起作用
有谁能告诉我,我在这里基本上遗漏了什么,并就如何找到解决方案提供一些提示吗?此时,我唯一的想法是在显示之前旋转图像并保存到磁盘。您应该设置属性,而不是RenderTransform
<Image.LayoutTransform>
<TransformGroup>
<ScaleTransform ScaleX="0.8" ScaleY="0.8"/>
<RotateTransform Angle="90"/>
</TransformGroup>
</Image.LayoutTransform>
由于列宽是固定的,ScaleTransform似乎是多余的
<Image.LayoutTransform>
<RotateTransform Angle="90"/>
</Image.LayoutTransform>
谢谢--我将要研究一个异常--“元素的布局度量覆盖'System.Windows.Controls.Image'不应返回NaN值作为其所需大小。”我已尝试通过设置图像元素的最小/最大高度/宽度来暂时解决此问题,但仍然报告NaN的所需大小。由于列宽是固定的,您可能会删除ScaleTransform。实际上,我两个都删除了。我现在使用的XAML不硬编码列宽。但这就是问题所在,谢谢!我刚换了,现在一切都正常了。:)