WPF旋转图像并将其对齐

WPF旋转图像并将其对齐,wpf,xaml,rotation,rendertransform,Wpf,Xaml,Rotation,Rendertransform,我有一个要旋转源的图像组件: <Image Name="ImageTarget" HorizontalAlignment="Left" VerticalAlignment="Top" Stretch="Uniform" RenderTransformOrigin=".5,.5"> <Image.RenderTransform> <TransformGroup> <ScaleTransform ScaleX=

我有一个要旋转源的图像组件:

<Image Name="ImageTarget" HorizontalAlignment="Left" VerticalAlignment="Top" Stretch="Uniform" RenderTransformOrigin=".5,.5">
    <Image.RenderTransform>
        <TransformGroup>
            <ScaleTransform ScaleX="{Binding Main.BindedViewMode, Converter={StaticResource ImageSizeConverter}}" />
            <ScaleTransform ScaleY="{Binding Main.BindedViewMode, Converter={StaticResource ImageSizeConverter}}" />
            <RotateTransform Angle="-90" />
        </TransformGroup>
    </Image.RenderTransform>
</Image>

我从代码中设置
ImageTarget
的源代码

在转换(RenderTransformorMorigin和RotateTransform)之前,我的窗口如下所示:

但在轮换之后:

因此,正如您所看到的,宽度和高度都发生了变化

因此,我的问题是:

  • 为什么尺寸变了
  • 如何对齐左上角的旋转图像(与以前相同)
谢谢


编辑:大小没有改变,我已经用不同的大小拍摄了两个不同的屏幕截图,stackoverflow会自动调整它们的大小。

我建议您使用
CompositeTransform
而不是
RotateTransform
ScaleTransform
。然后,您可以在
CompositeTransform
标记内调用
Rotate
TranslateX
/
TranslateY
来移动对象


在您的代码中,由于
ScaleX
/
ScaleY
,维度发生了更改

问题在于变换是在布局过程之后应用的。在计算布局之前,应使用
LayoutTransform
执行转换:

<Image Name="ImageTarget" HorizontalAlignment="Left" VerticalAlignment="Top" Stretch="Uniform" RenderTransformOrigin=".5,.5">
<Image.LayoutTransform>
    <TransformGroup>
        <ScaleTransform ScaleX="{Binding Main.BindedViewMode, Converter={StaticResource ImageSizeConverter}}" />
        <ScaleTransform ScaleY="{Binding Main.BindedViewMode, Converter={StaticResource ImageSizeConverter}}" />
        <RotateTransform Angle="-90" />
    </TransformGroup>
</Image.LayoutTransform>


不幸的是,WPF中没有CompositeTransform:哦,好的,对不起!你试过TransformGroup了吗?没问题:)Novitchi的答案解决了这个问题请看一下。请注意,你不需要两个ScaleTransforms。您可以绑定单个ScaleTransform的ScaleX和ScaleY。不幸的是,此解决方案似乎与UWP应用程序无关。你知道如何使它正常工作吗?你可以在我的问题中看到更多细节: