2017-02-25 80 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.LayoutTransform而不是Image.RenderTransform,它工作。 –

回答

0

使用下面的結構ViewBox

<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> 

請注意,您應該設置ViewBox和內Control的大小(在你的情況下,Image)等於ScrollViewer的大小。 ViewBox將調整內部Control的大小,以使滾動條永不可見。

請注意,我使用了紅色邊框,您可以添加圖像。

編輯

剛纔檢查它。您不需要設置寬度,而只需設置內部控件的大小。換句話說,它也可以工作:

<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>