2015-06-18 68 views
0

我已经在这里我想旋转源的图像组件:WPF旋转图像,并将其对齐

<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源从代码。

改造前(RenderTransformOrigin和RotateTransform)我的窗户是这样的:

enter image description here

但旋转后:

enter image description here

所以,你可以看到,宽度和身高已经改变。

所以我的问题是:

  • 为什么大小变化?
  • 如何对齐左上角的旋转图像(与以前相同)?

感谢

编辑:尺寸没有改变,我已经采取了不同大小的两个不同的截图,和计算器会自动调整它们的大小。

+0

看看[TransformedBitmap](https://msdn.microsoft.com/en-us/library/system .windows.media.imaging.transformedbitmap.aspx)。 – Clemens

回答

1

问题在于布局过后应用了变换。您应该使用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> 

+0

这很好,谢谢 – Epitouille

+0

请注意,您不需要两个ScaleTransforms。您可以绑定单个ScaleTransform的ScaleX和ScaleY。 – Clemens

-1

我建议您使用CompositeTransform而不是RotateTransformScaleTransform。然后,您可以拨打标记内的RotateTranslateX/TranslateY移动您的对象。

在您的代码中,尺寸因ScaleX/ScaleY而改变!

+0

我会试一试:) – Epitouille

+0

让我知道它是否有效! ;) –

+0

不幸的是,CompositeTransform在WPF中不可用:http://stackoverflow.com/questions/5201675/is-compositetransform-used-only-in-silverlight – Epitouille