如何保持旋转图像或画布

时间:2014-11-04 07:36:28

标签: winrt-xaml

此代码仅触发一次旋转画布。当用户第二次按下旋转按钮时为什么不旋转?

--update with button
<AppBarButton x:Name="CamRotate90" Margin="0,2,2,0" Width="90" Height="90" FontSize="16" Label="Rotate-Right" Icon="Rotate" Click="CamRotate90_Click"> </AppBarButton> <Canvas x:Name="canvas" Margin="231,28,321,111" Width="700" Height="525" Grid.Row="0" Grid.RowSpan="3" Grid.Column="0"> <Image Canvas.Top="0" Canvas.Left="0" Margin="0" x:Name="preview" Width="700" Height="525" Stretch="UniformToFill" > </Image> </Canvas> private void CamRotate90_Click(object sender, RoutedEventArgs e) { CompositeTransform ct = new CompositeTransform(); ct.CenterX = canvas.ActualWidth / 2; ct.CenterY = canvas.ActualHeight/2; ct.Rotation = 90; canvas.RenderTransform = ct; }

1 个答案:

答案 0 :(得分:0)

每次创建一次RenderTransform并重复使用它,而不是替换RenderTransform:

的Xaml:

<Canvas x:Name="canvas" Margin="231,28,321,111" Width="700" Height="525" Grid.Row="0" Grid.RowSpan="3" Grid.Column="0">
    <Canvas.RenderTransform>
        <CompositeTransform />
    </Canvas.RenderTransform>
    <Image Canvas.Top="0" Canvas.Left="0" Margin="0" x:Name="preview" Width="700" Height="525"  Stretch="UniformToFill" >
    </Image>
</Canvas>

代码:

private void CamRotate90_Click(object sender, RoutedEventArgs e)
{
    CompositeTransform ct = canvas.RenderTransform as CompositeTransform;
    if (ct != null) // Just to make sure
    {
        ct.CenterX = canvas.ActualWidth / 2;
        ct.CenterY = canvas.ActualHeight / 2;
        ct.Rotation += 90;
    }
}