基础知识

(一)动画:是快速播放一系列图像(其中每个图像与下一个图像略微不同)给人造成的一种幻觉

(二)动画类型:两类
   (1)From/To/By动画:在起始值和结束值之间进行动画处理。
     (2)关键帧动画:在使用关键帧对象指定的一系列值之间播放动画

    Silverlight动画学习笔记(一):Silverlight动画的基本知识_xml

 (三) 动画是时间线:所有动画均继承自 Timeline 对象,因此所有动画都是专用类型的时间线.有以下重要属性:  

       (1)TargetName:指定要进行动画处理的对象
       (2)TargetProperty:指定要进行动画处理的属性
      (3)Duration:(时间线)整个动画单次播放持续的时间(格式为 小时 : 分钟 : 秒 或者Forever 或者 Automatic)
      (4)AutoReverse:指定时间线在到达其 Duration 的终点后是否倒退(True/Flase)
      (5)RepeatBehavior:获取或设置此时间线的重复行为(RepeatBehavior 可以定义为时间跨度字符串、#x 字符串或者特殊值 Forever)。
        (6)FillBehavior: 属性指定时间线结束时的行为方式( HoldEnd和Stop) ,默认HoldEnd.如果想保持结束后的状态HoldEnd,否则Stop
        (7) BeginTime: 属性可以指定动画对象活动开始点的时间

<UserControl x:Class="AnimationStudy.MainPage"
xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable
="d"
d:DesignHeight
="300" d:DesignWidth="400">
<StackPanel>
<StackPanel.Resources>
<!-- 矩形透明度动画 -->
<Storyboard x:Name="myStoryboard">
<!--
(1)TargetName:指定要进行动画处理的对象
(2)TargetProperty:指定要进行动画处理的属性
(3)Duration:(时间线)整个动画单次播放持续的时间(格式为 小时 : 分钟 : 秒 或者Forever 或者 Automatic)
(4)AutoReverse:指定时间线在到达其 Duration 的终点后是否倒退(True/Flase)
(5)RepeatBehavior:获取或设置此时间线的重复行为(RepeatBehavior 可以定义为时间跨度字符串、#x 字符串或者特殊值 Forever)。
(6)FillBehavior: 属性指定时间线结束时的行为方式( HoldEnd和Stop) ,默认HoldEnd.如果想保持结束后的状态HoldEnd,否则Stop
(7) BeginTime: 属性可以指定动画对象活动开始点的时间
-->
<DoubleAnimation Storyboard.TargetName="MyAnimatedRectangle"
Storyboard.TargetProperty
="Opacity" BeginTime="0:0:2"
From
="1.0" To="0.0" Duration="0:0:1"
AutoReverse
="False"
RepeatBehavior
="1x" FillBehavior="HoldEnd" />
</Storyboard>
</StackPanel.Resources>

<TextBlock Margin="10">点击矩形开始动画</TextBlock>
<Rectangle MouseLeftButtonDown="Mouse_Clicked"
x:Name
="MyAnimatedRectangle"
Width
="100"
Height
="100"
Fill
="Blue" />
</StackPanel>
</UserControl>

(四) 对属性应用动画

<UserControl x:Class="AnimationStudy.AnimationByProperty"
xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable
="d"
d:DesignHeight
="300" d:DesignWidth="400">
<!--对属性应用动画
(1)间接以属性作为目标
正在进行动画处理的属性值 (Color) 属于未命名甚至未显式声明的 SolidColorBrush 对象
Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"
(2)直接属性目标
显式创建 SolidColorBrush,对其进行命名,然后直接以其 Color 属性为目标
-->
<StackPanel x:Name="myStackPanel" Background="Red" Loaded="Start_Animation">
<StackPanel.Resources>
<Storyboard x:Name="colorStoryboard">
<ColorAnimation
BeginTime="00:00:00"
Storyboard.TargetName
="myStackPanel"
Storyboard.TargetProperty
="(Panel.Background).(SolidColorBrush.Color)"
From
="Red" To="Green" Duration="0:0:4" />
</Storyboard>
</StackPanel.Resources>
</StackPanel>
<!--<StackPanel Loaded="Start_Animation">
<StackPanel.Resources>
<Storyboard x:Name="colorStoryboard">
<ColorAnimation BeginTime="00:00:00" Storyboard.TargetName="mySolidColorBrush"
Storyboard.TargetProperty="Color" From="Red" To="Green" Duration="0:0:4" />
</Storyboard>
</StackPanel.Resources>
<StackPanel.Background>
<SolidColorBrush x:Name="mySolidColorBrush" Color="Red" />
</StackPanel.Background>
</StackPanel>
-->
</UserControl>

(五)在程序代码中创建动画,改写(三)中Xaml为程序代码

//在程序代码中创建动画
private void button1_Click(object sender, RoutedEventArgs e)
{
//创建矩形
Rectangle myRectangle = new Rectangle();
myRectangle.Width
= 200;
myRectangle.Height
= 200;
Color myClolor
= Color.FromArgb(255, 255, 0, 0);
SolidColorBrush myBrush
= new SolidColorBrush();
myBrush.Color
= myClolor;
myRectangle.Fill
= myBrush;
LayoutRoot.Children.Add(myRectangle);
//2秒中的时间线
Duration duration = new Duration(TimeSpan.FromSeconds(10));

// 创建DoubleAnimation动画
DoubleAnimation myDoubleAnimation = new DoubleAnimation();
myDoubleAnimation.Duration
= duration;
//创建演示图版.并将myDoubleAnimation动画加到演示图板
Storyboard sb = new Storyboard();
sb.Duration
= duration;
sb.Children.Add(myDoubleAnimation);

//设置动画对象和动画属性
Storyboard.SetTarget(myDoubleAnimation, myRectangle);
Storyboard.SetTargetProperty(myDoubleAnimation,
new PropertyPath(OpacityProperty));
myDoubleAnimation.To
=0.0;
sb.BeginTime
= new TimeSpan(0, 0, 0, 2);
sb.RepeatBehavior
= new RepeatBehavior(3);
myDoubleAnimation.AutoReverse
= false;
myDoubleAnimation.FillBehavior
= FillBehavior.HoldEnd;
//以资源文件加入到LayOutRoot
LayoutRoot.Resources.Add("123",sb);
//开始动画
sb.Begin();

}