先建立一個button
<Button Width="80" Height="60" Content="旋轉" Name="trans" Click="trans_Click" Style="{x:Null}"/>
方法一:繞左上角旋轉
public void Transform1() { RotateTransform rtf = new RotateTransform(); trans.RenderTransform = rtf; DoubleAnimation dbAscending = new DoubleAnimation(0, 360, new Duration (TimeSpan.FromSeconds(1))); dbAscending.RepeatBehavior = RepeatBehavior.Forever; rtf.BeginAnimation(RotateTransform.AngleProperty, dbAscending); }
方法二:繞左上角旋轉
public void Transform2() { RotateTransform rtf = new RotateTransform(); trans.RenderTransform = rtf; DoubleAnimation dbAscending = new DoubleAnimation(0, 360, new Duration(TimeSpan.FromSeconds(1))); Storyboard storyboard = new Storyboard(); dbAscending.RepeatBehavior = RepeatBehavior.Forever; storyboard.Children.Add(dbAscending); Storyboard.SetTarget(dbAscending, trans); Storyboard.SetTargetProperty(dbAscending, new PropertyPath("RenderTransform.Angle")); storyboard.Begin(); }
效果如下:
截圖不怎么能看出效果,這兩種方法是按某個角進行旋轉的。
方法三:Xaml動畫,繞X中線或者Y中線翻轉
<Window x:Class="Oland.HSS.InHospital.Window2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window2" Height="300" Width="300"> <Window.Resources> <Storyboard x:Key="LoadHeadStoryboard" > <DoubleAnimationUsingKeyFrames BeginTime="0:0:0" Duration="0:0:5" RepeatBehavior="Forever" Storyboard.TargetName="DesignerHead" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"> <SplineDoubleKeyFrame Value="1"/> <SplineDoubleKeyFrame Value="-1"/> <SplineDoubleKeyFrame Value="1"/> </DoubleAnimationUsingKeyFrames> </Storyboard> </Window.Resources> <Window.Triggers> <EventTrigger RoutedEvent="FrameworkElement.Loaded"> <BeginStoryboard Storyboard="{StaticResource LoadHeadStoryboard}"/> </EventTrigger> </Window.Triggers> <Grid> <Button Content="旋轉" x:Name="DesignerHead" Height="40" Width="60" RenderTransformOrigin="0.4,0.5" Style="{x:Null}"> <Button.RenderTransform> <TransformGroup> <ScaleTransform ScaleX="1" ScaleY="1"></ScaleTransform> </TransformGroup> </Button.RenderTransform> </Button> </Grid> </Window>
可設置是延X中線或者是Y中線旋轉,上邊那種是按左上角旋轉。
方法四:第一種方式使用Xaml實現(左上)
<Button Content="旋轉" Height="32" HorizontalAlignment="Left" Margin="106,176,0,0" Name="button1" VerticalAlignment="Top" Width="58" > <Button.RenderTransform> <RotateTransform x:Name="trans" Angle="0"/> </Button.RenderTransform> <Button.Triggers> <EventTrigger RoutedEvent="Button.Click"> <BeginStoryboard> <Storyboard> <DoubleAnimation To="360" RepeatBehavior="Forever" Duration="0:0:3" Storyboard.TargetName="trans" Storyboard.TargetProperty="Angle"/> </Storyboard> </BeginStoryboard> </EventTrigger> </Button.Triggers> </Button>
效果同第一第二種方法
方法五:繞中點旋轉:
<Button Content="旋轉" Height="32" HorizontalAlignment="Left" Margin="106,176,0,0" Name="button1" VerticalAlignment="Top" Width="58" RenderTransformOrigin="0.5,0.5"> <Button.RenderTransform> <RotateTransform x:Name="trans" Angle="0"/> </Button.RenderTransform> <Button.Triggers> <EventTrigger RoutedEvent="Button.Click"> <BeginStoryboard > <Storyboard> <DoubleAnimation From="0" To="360" RepeatBehavior="Forever" Duration="0:0:3" Storyboard.TargetName="trans" Storyboard.TargetProperty="Angle"/> </Storyboard> </BeginStoryboard> </EventTrigger> </Button.Triggers> </Button>
這段代碼和上面差不多,
關鍵是RenderTransformOrigin,設成0.5,0.5就可以了