■ RotateTransform 클래스 사용하기
------------------------------------------------------------------------------------------------------------------------
▶ MainWindow.xaml
<Window x:Class="TestProject.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="800" Height="600" Title="RotateTransform 클래스 사용하기" FontFamily="나눔고딕코딩" FontSize="12"> <Window.Resources> <Style TargetType="{x:Type TextBlock}"> <Setter Property="Padding" Value="5" /> <Setter Property="FontWeight" Value="Bold" /> </Style> <DrawingBrush x:Key="BlueGridDrawingBrushKey" ViewportUnits="Absolute" Viewport="0 0 10 10" TileMode="Tile"> <DrawingBrush.Drawing> <DrawingGroup> <DrawingGroup.Children> <GeometryDrawing Brush="White"> <GeometryDrawing.Geometry> <RectangleGeometry Rect="0 0 1 1" /> </GeometryDrawing.Geometry> </GeometryDrawing> <GeometryDrawing Geometry="M 0 0 L 1 0 1 0.1 0 0.1 Z" Brush="#ccccff" /> <GeometryDrawing Geometry="M 0 0 L 0 1 0.1 1 0.1 0 Z" Brush="#ccccff" /> </DrawingGroup.Children> </DrawingGroup> </DrawingBrush.Drawing> </DrawingBrush> </Window.Resources> <Border Margin="10" BorderThickness="1" BorderBrush="Black"> <ScrollViewer> <WrapPanel Margin="10"> <Border HorizontalAlignment="Left" Margin="10" BorderThickness="1" BorderBrush="Black" Background="{StaticResource BlueGridDrawingBrushKey}"> <Canvas Width="200" Height="200"> <TextBlock> 회전 미적용 </TextBlock> <Polyline Canvas.Left="75" Canvas.Top="50" StrokeThickness="10" Stroke="Blue" Points="25 25 0 50 25 75 50 50 25 25 25 0" /> </Canvas> </Border> <Border HorizontalAlignment="Left" Margin="10" BorderThickness="1" BorderBrush="Black" Background="{StaticResource BlueGridDrawingBrushKey}"> <Canvas Width="200" Height="200"> <TextBlock> 중심 : 25, 50<LineBreak/> 각도 : 45 </TextBlock> <Polyline Canvas.Left="75" Canvas.Top="50" Points="25 25 0 50 25 75 50 50 25 25 25 0" Stroke="Blue" StrokeThickness="10" Opacity="0.25" /> <Polyline Canvas.Left="75" Canvas.Top="50" StrokeThickness="10" Stroke="Blue" Points="25 25 0 50 25 75 50 50 25 25 25 0"> <Polyline.RenderTransform> <RotateTransform CenterX="25" CenterY="50" Angle="45" /> </Polyline.RenderTransform> </Polyline> <Ellipse Canvas.Left="95" Canvas.Top="95" Width="10" Height="10" Fill="Red" /> </Canvas> </Border> <Border HorizontalAlignment="Left" Margin="10" BorderThickness="1" BorderBrush="Black" Background="{StaticResource BlueGridDrawingBrushKey}"> <Canvas Width="200" Height="200"> <TextBlock> 중심 : 0, 0<LineBreak/> 각도 : 45 </TextBlock> <Polyline Canvas.Left="75" Canvas.Top="50" Points="25 25 0 50 25 75 50 50 25 25 25 0" Stroke="Blue" StrokeThickness="10" Opacity="0.25" /> <Polyline Canvas.Left="75" Canvas.Top="50" StrokeThickness="10" Stroke="Blue" Points="25 25 0 50 25 75 50 50 25 25 25 0"> <Polyline.RenderTransform> <RotateTransform CenterX="0" CenterY="0" Angle="45" /> </Polyline.RenderTransform> </Polyline> <Ellipse Canvas.Left="70" Canvas.Top="45" Width="10" Height="10" Fill="Red" /> </Canvas> </Border> <Border HorizontalAlignment="Left" Margin="10" BorderThickness="1" BorderBrush="Black" Background="{StaticResource BlueGridDrawingBrushKey}"> <Canvas Height="200" Width="200"> <TextBlock> 중심 : 50%, 50%<LineBreak/> 각도 : 45 </TextBlock> <Polyline Canvas.Left="75" Canvas.Top="50" StrokeThickness="10" Stroke="Blue" Opacity="0.25" Points="25 25 0 50 25 75 50 50 25 25 25 0" /> <Polyline Canvas.Left="75" Canvas.Top="50" StrokeThickness="10" Stroke="Blue" Points="25 25 0 50 25 75 50 50 25 25 25 0" RenderTransformOrigin="0.5 0.5"> <Polyline.RenderTransform> <RotateTransform Angle="45" /> </Polyline.RenderTransform> </Polyline> <Ellipse Canvas.Left="95" Canvas.Top="82.5" Width="10" Height="10" Fill="Red" /> </Canvas> </Border> <Border HorizontalAlignment="Left" Margin="10" BorderThickness="1" BorderBrush="Black" Background="{StaticResource BlueGridDrawingBrushKey}"> <Canvas Height="200" Width="200"> <TextBlock> 중심 : 25%, 25%<LineBreak/> 각도 : 45 </TextBlock> <Polyline Canvas.Left="75" Canvas.Top="50" StrokeThickness="10" Stroke="Blue" Opacity="0.25" Points="25 25 0 50 25 75 50 50 25 25 25 0" /> <Polyline Canvas.Left="75" Canvas.Top="50" StrokeThickness="10" Stroke="Blue" Points="25 25 0 50 25 75 50 50 25 25 25 0" RenderTransformOrigin="0.25 0.25"> <Polyline.RenderTransform> <RotateTransform Angle="45" /> </Polyline.RenderTransform> </Polyline> <Ellipse Canvas.Left="82.5" Canvas.Top="63.75" Width="10" Height="10" Fill="Red" /> </Canvas> </Border> <Border HorizontalAlignment="Left" Margin="10" BorderThickness="1" BorderBrush="Black" Background="{StaticResource BlueGridDrawingBrushKey}"> <Canvas Height="200" Width="200"> <TextBlock> 중심 : 25, 50<LineBreak/> 각도 : 애니메이션 </TextBlock> <Polyline Canvas.Left="75" Canvas.Top="50" StrokeThickness="10" Stroke="Blue" Opacity="0.25" Points="25 25 0 50 25 75 50 50 25 25 25 0" /> <Polyline Canvas.Left="75" Canvas.Top="50" StrokeThickness="10" Stroke="Blue" Points="25 25 0 50 25 75 50 50 25 25 25 0"> <Polyline.RenderTransform> <RotateTransform x:Name="rotateTransform1" CenterX="25" CenterY="50" Angle="0" /> </Polyline.RenderTransform> </Polyline> <Ellipse Canvas.Left="95" Canvas.Top="95" Width="10" Height="10" Fill="Red" /> </Canvas> </Border> <Border HorizontalAlignment="Left" Margin="10" BorderBrush="Black" BorderThickness="1" Background="{StaticResource BlueGridDrawingBrushKey}"> <Canvas Height="200" Width="200"> <TextBlock> 중심 : 애니메이션<LineBreak/> 각도 : 애니메이션 </TextBlock> <Polyline Canvas.Left="75" Canvas.Top="50" StrokeThickness="10" Stroke="Blue" Opacity="0.25" Points="25 25 0 50 25 75 50 50 25 25 25 0" /> <Polyline Canvas.Left="75" Canvas.Top="50" Points="25 25 0 50 25 75 50 50 25 25 25 0" Stroke="Blue" StrokeThickness="10"> <Polyline.RenderTransform> <RotateTransform x:Name="rotateTransform2" CenterX="0" CenterY="0" Angle="0" /> </Polyline.RenderTransform> </Polyline> <Path Canvas.Left="75" Canvas.Top="50" Fill="Red"> <Path.Data> <EllipseGeometry x:Name="ellipseGeometry2" Center="0 0" RadiusX="5" RadiusY="5" /> </Path.Data> </Path> </Canvas> </Border> <StackPanel> <Button Name="startButton" Margin="10" Width="100" Height="30"> 시작 </Button> <Button Name="stopButton" Margin="0" Width="100" Height="30"> 중단 </Button> <StackPanel.Triggers> <EventTrigger SourceName="startButton" RoutedEvent="Button.Click"> <BeginStoryboard Name="beginStoryboard"> <Storyboard> <ParallelTimeline RepeatBehavior="Forever"> <DoubleAnimation Storyboard.TargetName="rotateTransform1" Storyboard.TargetProperty="(RotateTransform.Angle)" RepeatBehavior="Forever" From="0" To="360" Duration="0:0:5" /> <ParallelTimeline RepeatBehavior="Forever"> <DoubleAnimation Storyboard.TargetName="rotateTransform2" Storyboard.TargetProperty="Angle" RepeatBehavior="4x" From="0" To="360" Duration="0:0:2.5" /> <DoubleAnimation Storyboard.TargetName="rotateTransform2" Storyboard.TargetProperty="CenterX" AutoReverse="True" From="0" To="25" Duration="0:0:5" /> <DoubleAnimation Storyboard.TargetName="rotateTransform2" Storyboard.TargetProperty="CenterY" AutoReverse="True" From="0" To="50" Duration="0:0:5" /> <PointAnimation Storyboard.TargetName="ellipseGeometry2" Storyboard.TargetProperty="Center" AutoReverse="True" From="0 0" To="25 50" Duration="0:0:5" /> </ParallelTimeline> </ParallelTimeline> </Storyboard> </BeginStoryboard> </EventTrigger> <EventTrigger SourceName="stopButton" RoutedEvent="Button.Click"> <StopStoryboard BeginStoryboardName="beginStoryboard" /> </EventTrigger> </StackPanel.Triggers> </StackPanel> </WrapPanel> </ScrollViewer> </Border> </Window>
|
------------------------------------------------------------------------------------------------------------------------
'C# > WPF' 카테고리의 다른 글
[C#/WPF] Imaging 클래스 : CreateBitmapSourceFromHBitmap 정적 메소드를 사용해 비트맵에서 비트맵 소스 구하기 (0) | 2020.12.05 |
---|---|
[C#/WPF] TranslateTransform 클래스 사용하기 (0) | 2020.12.05 |
[C#/WPF] SkewTransform 클래스 사용하기 (0) | 2020.12.05 |
[C#/WPF] EventManager 클래스 : RegisterClassHandler 정적 메소드를 사용해 라우팅 이벤트 오버라이딩하기 (0) | 2020.12.01 |
[C#/WPF] ScaleTransform 클래스 사용하기 (0) | 2020.11.24 |
[C#/WPF] RotateTransform 클래스 사용하기 (0) | 2020.11.24 |
[C#/WPF] 확대/축소/이동/드래그 가능한 캔버스 만들기 (0) | 2020.11.15 |
[C#/WPF] DispatcherTimer 클래스 : 원 형태으로 이동시키기 (0) | 2020.11.15 |
[C#/WPF] DispatcherTimer 클래스 : 파동 형태로 이동시키기 (0) | 2020.11.15 |
[C#/WPF] DispatcherTimer 클래스 : 사각형을 부드럽게 이동시키기 (0) | 2020.11.15 |
[C#/WPF] Control 엘리먼트 : Background 속성에서 null과 Transparent 값 설정시 차이점 비교하기 (0) | 2020.11.06 |
댓글을 달아 주세요