2017-02-25 9 views
0

ScrollViewer(WPF)でイメージを回転しようとしましたが、イメージ全体が表示されたままである必要があります。回転角が例えば45の場合、画像の角は切り取られます。回転した画像の周囲の長方形を計算することによって画像の幅と高さを設定しようとしました。それは動作しますが、ない回転角度は、45を超えるScrollViewer内で画像を回転するには?

<Grid> 
    <ScrollViewer ScrollViewer.HorizontalScrollBarVisibility="Visible" Margin="0,0,0,0"> 
     <Image x:Name="image" RenderTransformOrigin="0.5,0.5" Margin="0,0,0,0" MouseDown="image_MouseDown" MouseRightButtonDown="image_MouseRightButtonDown" MouseLeftButtonDown="image_MouseLeftButtonDown"> 
      <Image.RenderTransform> 
       <TransformGroup> 
        <ScaleTransform x:Name="scal"/> 
        <SkewTransform/> 
        <RotateTransform Angle="90" x:Name="rot"/> 
        <TranslateTransform/> 
       </TransformGroup> 
      </Image.RenderTransform> 
     </Image> 
    </ScrollViewer> 

</Grid> 
+1

あなたが書いたXAMLコードとC#コードを追加してください。 – Tony

+0

あなたは 'アスペクト比'を維持する必要があります、そして今、そのような問題があります。 – AnjumSKhan

+2

Image.RenderTransformの代わりにImage.LayoutTransformを使用しました。 –

答えて

0

使用次のような構造でViewBoxの場合:あなたはViewBoxと内側Controlのサイズを(設定する必要があり

<ScrollViewer Width="100" Height="100" Background="Black" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> 
    <Viewbox Width="100" Height="100"> 
     <Border Width="100" Height="100" Background="Red" > 
      <Border.LayoutTransform> 
       <RotateTransform Angle="30" /> 
      </Border.LayoutTransform> 
     </Border> 
    </Viewbox> 
</ScrollViewer> 

注意あなたの場合Image)はScrollViewerのサイズと同じです。 ViewBoxは、Controlのサイズを調整し、スクロールバーが決して表示されないようにします。

赤い枠線を使用していますが、画像を追加できます。

編集

はちょうどそれをチェックします。 Widthsを設定する必要はなく、内部コントロールのサイズだけを設定する必要があります。言い換えれば、これも動作します:

<ScrollViewer Background="Black" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> 
    <Viewbox> 
     <Border Width="1" Height="1" Background="Red" > 
      <Border.LayoutTransform> 
       <RotateTransform Angle="30" /> 
      </Border.LayoutTransform> 
     </Border> 
    </Viewbox> 
</ScrollViewer>