WPF-关于动画Animation(及其常见问题)

目录

一、动画合集

常见动画类型

1、资源里添加动画资源

2、事件触发器里开始一个动画

3、Double型关键帧动画

4、Object型关键帧动画 

5、Color型关键帧动画

6、String型关键帧动画

7、Matrix型沿路径动画

二、扩展

Ⅰ 动画常见问题

1、控制动画结束问题

Ⅱ 流动Path

Ⅲ 变形


一、动画合集

创建一个Storyboard演示画板,在画板里对动画进行定义与处理。

常见动画类型

提醒:更多动画类型及介绍可查看:动画概述-WPF .NET Framework

DoubleAnimation                               //普通Double型控制动画

DoubleAnimationUsingKeyFrames //Double型关键帧动画

ObjectAnimationUsingKeyFrames  //Object型关键帧动画

ColorAnimationUsingKeyFrames    //Color型关键帧动画

StringAnimationUsingKeyFrames    //String型关键帧动画

MatrixAnimationUsingPath              //沿路径型动画

1、资源里添加动画资源

注意:开始动画得自己规划逻辑(触发器、事件都可)

     var storybd = this.FindResource("storybd") as Storyboard;
     storybd.Begin();
    <Window.Resources>
        <Storyboard x:Key="storybd">
            <DoubleAnimation AutoReverse="True"
                             By="0.1"
                             RepeatBehavior="Forever"
                             Storyboard.TargetName="btn"
                             Storyboard.TargetProperty="Opacity"
                             From="0.0" />
            <DoubleAnimation AutoReverse="True"
                             RepeatBehavior="Forever"
                             Storyboard.TargetName="btn"
                             Storyboard.TargetProperty="(Control.Background).(RadialGradientBrush.GradientStops)[1].Offset"
                             From="1"
                             To="0"
                             Duration="0:0:1" />
        </Storyboard>
    </Window.Resources>

2、事件触发器里开始一个动画

        <Rectangle Name="Rect"
                   Width="70"
                   Height="80"
                   Margin="279,0,0,0"
                   HorizontalAlignment="Left"
                   VerticalAlignment="Center"
                   Fill="Green">
            <Rectangle.Triggers>
                <EventTrigger RoutedEvent="Rectangle.Loaded">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation AutoReverse="True"
                                             RepeatBehavior="Forever"
                                             Storyboard.TargetName="Rect"
                                             Storyboard.TargetProperty="Opacity"
                                             From="1"
                                             To="0"
                                             Duration="0:0:1" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Rectangle.Triggers>
        </Rectangle>

3、Double型关键帧动画

<DoubleAnimationUsingKeyFrames AutoReverse="True"
                               RepeatBehavior="Forever"
                               Storyboard.TargetName="Rect"
                               Storyboard.TargetProperty="(FrameworkElement.Width)">
            <EasingDoubleKeyFrame KeyTime="0:0:0" Value="0" />                        
            <EasingDoubleKeyFrame KeyTime="0:0:5" Value="70" />
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames AutoReverse="True"
                               RepeatBehavior="Forever"
                               Storyboard.TargetName="Rect"
                               Storyboard.TargetProperty="(FrameworkElement.Height)">
            <EasingDoubleKeyFrame KeyTime="0:0:0" Value="0" />
            <EasingDoubleKeyFrame KeyTime="0:0:5" Value="80" />
</DoubleAnimationUsingKeyFrames>

4、Object型关键帧动画 

   <Window.Resources>
        <Storyboard x:Key="story">
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="img" AutoReverse="True" RepeatBehavior="Forever" Storyboard.TargetProperty="(UIElement.Visibility)">
                <DiscreteObjectKeyFrame KeyTime="0:0:0.03" Value="{x:Static Visibility.Hidden}"/>
                <DiscreteObjectKeyFrame KeyTime="0:0:0.06" Value="{x:Static Visibility.Visible}"/>
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>
    </Window.Resources>

5、Color型关键帧动画

      <Storyboard x:Key="story">
            <ColorAnimationUsingKeyFrames AutoReverse="True"
                                          RepeatBehavior="Forever"
                                          Storyboard.TargetName="btn"
                                          Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)">
                <EasingColorKeyFrame KeyTime="0" Value="Red" />
                <EasingColorKeyFrame KeyTime="0:0:0.5" Value="Blue" />
                <DiscreteColorKeyFrame KeyTime="0:0:1" Value="Red" />
                <DiscreteColorKeyFrame KeyTime="0:0:1.5" Value="Yellow" />
            </ColorAnimationUsingKeyFrames>
        </Storyboard>

6、String型关键帧动画

FillBehavior,动画结束时行为

                        HoldEnd:保持在动画结束的最后一帧画面

                        Stop:动画结束,恢复动画开始前的画面

            <StringAnimationUsingKeyFrames FillBehavior="HoldEnd"
                                           Storyboard.TargetName="btn"
                                           Storyboard.TargetProperty="(Button.Content)">
                <DiscreteStringKeyFrame KeyTime="0" Value="5s" />
                <DiscreteStringKeyFrame KeyTime="0:0:1" Value="4s" />
                <DiscreteStringKeyFrame KeyTime="0:0:2" Value="3s" />
                <DiscreteStringKeyFrame KeyTime="0:0:3" Value="2s" />
                <DiscreteStringKeyFrame KeyTime="0:0:4" Value="1s" />
                <DiscreteStringKeyFrame KeyTime="0:0:5" Value="0s" />
            </StringAnimationUsingKeyFrames>

7、Matrix型沿路径动画

使用如下:

移动控件可用RenderTransformOrigin="0.5,0.5",切换位置转换的中心点;

DoesRotateWithTangent:按切换方向旋转;

PathGeometry:指定路径;

 <Rectangle.RenderTransform>
        <MatrixTransform />
 </Rectangle.RenderTransform>
 <MatrixAnimationUsingPath AutoReverse="True"
                           DoesRotateWithTangent="True"
                           PathGeometry="{StaticResource Path2}"
                           RepeatBehavior="Forever"
                           Storyboard.TargetName="Rect"
                           Storyboard.TargetProperty="RenderTransform.Matrix"
                           Duration="0:0:3" />

二、扩展

Ⅰ 动画常见问题

1、控制动画结束问题

 storyBoard.Begin(containObject,true);

注意:第二个参数(是否可控)必须给true才能控制动画停止;

2、开始动画失败

下方示例,运行会报错 :

                DoubleAnimation da = new DoubleAnimation()
                {
                    From = 1,
                    To = 0,
                    AutoReverse = true,
                    Duration = TimeSpan.FromSeconds(0.5),
                    RepeatBehavior = RepeatBehavior.Forever
                };
//Button btn
btn.Background = Brushes.Yellow;
btn.Background.BeginAnimation(Brush.OpacityProperty, da);

原因在于:btn.Background = Brushes.Yellow;

 由于Brushes.Yellow为sealed 密封对象,所以其属性不能更改,若一个动画对其某属性值进行改变,就会报错;

解决,将该语句改成:

btn.Background=

        new SolidColorBrush((Color)ColorConverter.ConvertFromString("Yellow"));

Ⅱ 流动Path

 StrokeDashArray :分段长度

 StrokeDashOffset:分段偏移值(改变该值实现流动效果)

 StrokeDashArray="5"  StrokeDashOffset="{Binding OffSet}"

Ⅲ 变形

控制变形的属性:RenderTransform:呈现变形(定义在UIElement类中);

                             LayoutTransform:布局变形(定义在FrameworkElement类中);

 其数据类型都是Transform抽象类

 Transform派生类;

  • TranslateTransform:偏移变形,X设置右移动值,Y设置底部移动值;
  • RotateTransform:旋转变形,Angle设置旋转中心,CenterX与CenterY设置旋转中心;
  • ScaleTransform:缩放变形,ScaleX、ScaleY分别设置X、Y轴方向放大倍数;
  • SkewTransform:倾斜变形,可指定X轴和Y轴方向的倾斜角度;
  • TransformGroup:变形组(多个独立变形合成一个变形组),可同时执行多种变形;
  • MatrixTransform:矩阵变形,Matrix有6个值(M11,M12,M21,M22,OffsetX,OffsetY),M11和M22默认值1,用于在x和y方向上的伸缩,M12和M21默认值0,用于倾斜控件,OffsetX和OffsetY默认值为0,用于平移控件,当值(1,0,0,1,0,0)不改变元素,值(0.5,1.4,0.4,0.5,-200,0)会重置元素的大小、倾斜和平移元素;
<Button.RenderTransform>
    <TransformGroup>
        <TranslateTransform X="30" Y="-30"/>
        <ScaleTransform ScaleX="0.8" ScaleY="0.8"/>
        <RotateTransform Angle="40" CenterX="0" CenterY="0"/>
        <SkewTransform AngleX="10" AngleY="10" CenterX="0" CenterY="0"/>
        <MatrixTransform Matrix="1,0,0,1,0,0"/>
    </TransformGroup>
</Button.RenderTransform>

上一篇:可商用的HuoCMS建站系统,基于thinkphp内核且免费开源


下一篇:MS17-010---利用“永恒之蓝”漏洞攻击 win7主机