2014-11-04 1 views
0

이 코드는 한 번만 실행되어 캔버스를 회전시킵니다. 사용자가 회전 버튼을 두 번째로 누를 때 왜 회전하지 않습니까?이미지 또는 캔버스를 계속 회전하는 방법

XAML을 : 대신으로 RenderTransform마다 한 번으로 RenderTransform을 생성하고 재사용 교체

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

+0

작동하지 않습니다. ct.Rotation + = 90; – MilkBottle

+0

매번 새로운 변환 객체를 만들므로 물론 + = 작동하지 않습니다. 죄송합니다. 대신, 버튼을 클릭 할 때마다 클래스의 카운터를 유지 한 다음 변환을 x 90으로 설정하십시오. – kidshaw

답변

0

<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; 
    } 
} 
관련 문제