Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF ListView中图像的奇怪转换行为_Wpf_Image_Listview_Rotatetransform_Transformgroup - Fatal编程技术网

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不硬编码列宽。但这就是问题所在,谢谢!我刚换了,现在一切都正常了。:)