zoukankan      html  css  js  c++  java
  • 代码创建 WPF 旋转、翻转动画(汇总)

    先建立一个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就可以了
  • 相关阅读:
    Windows Phone 31 日谈——第18日:WebBrowser控件
    Windows Phone 31 日谈——第19日:推送通知
    使用bat文件启动服务
    绝代反向指标——丘吉尔 炒股第二天就崩盘
    插入数据库返回自增长序号
    大并发服务器开发
    在这个不相信爱情的时代里,巴菲特的故事似乎让我又相信爱情了
    mysql操作语句
    马云三历高考才进大学 第一次高考数学考1分
    俞敏洪的屌丝逆袭 大学考了三次进北大
  • 原文地址:https://www.cnblogs.com/smiler/p/3189450.html
Copyright © 2011-2022 走看看