2015-06-18 64 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