2014-11-04 70 views
0

此代码仅触发一次旋转画布。为什么当用户第二次按下旋转按钮时它不会旋转?如何保持旋转图像或画布

 
--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; }
+0

尝试+ = 90?另外,在上面的代码中放下你的按钮定义,以便检查事件处理程序是否正确定义。 – kidshaw 2014-11-04 07:44:02

+0

它不起作用:ct.Rotation + = 90; – MilkBottle 2014-11-04 10:36:12

+0

您每次创建一个新的转换对象,当然+ =不起作用。抱歉。相反,每次单击该按钮时,请在课堂中保留一个计数器,然后将变换设置为该x 90。 – kidshaw 2014-11-04 21:28:48

回答

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