如何在ScrollViewer中旋转图像?

时间:2017-02-25 16:03:12

标签: wpf image image-rotation

我尝试在ScrollViewer(WPF)中旋转图像,但整个图像需要保持可见。如果旋转角度是例如45,则图像的角被切掉。我尝试通过计算旋转图像的周围矩形来设置图像的宽度和高度。它可以工作,但如果旋转角度超过45则不行。

<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 个答案:

答案 0 :(得分: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的大小,使ScrollBars永远不可见。

请注意,我使用了红色边框,您可以添加图像。

修改

刚检查过。您不需要设置宽度,只需要设置内部控件的大小。换句话说,这也有效:

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