介绍 Silverlight 2.0 动画: ColorAnimation - 在两个 Color 值之间做线性内插动画处理 DoubleAnimation - 在两个 Double 值之间做线性内插动画处理 PointAnimation - 在两个 Point 值之间做线性内插动画处理 内插关键帧动画 - 在 Color 或 Double 或 Point 动画中内插关键帧,以做线性, 离散, 三次贝塞尔曲线的动画处理 动态改变动画 - 通过程序控制,动态地改变动画 在线DEMOhttp://www.cnblogs.com/webabcd/archive/2008/10/09/1307486.html 示例 1、ColorAnimation.xaml
< UserControl x:Class ="Silverlight20.Animation.ColorAnimation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml" > < StackPanel HorizontalAlignment ="Left" > < Ellipse x:Name ="ellipse" Fill ="Red" Width ="200" Height ="100" > < Ellipse.Triggers > <!-- RoutedEvent - 所属对象的路由事件,仅有Loaded这个事件 --> < EventTrigger RoutedEvent ="Ellipse.Loaded" > < BeginStoryboard x:Name ="beginStoryboard" > < Storyboard x:Name ="storyboard" > <!-- ColorAnimation - 在两个 Color 值之间做线性内插动画处理 --> <!-- Storyboard.TargetName - 要进行动画处理的对象的名称 Storyboard.TargetProperty - 要进行动画处理的对象的属性 BeginTime - 时间线在被触发 BeginTime 的时间后才能开始播放 TimeSpan - [-][日.]时:分:秒[.1位到7为的秒后的小数](可为正;可为负;可为空;默认值为 0) From - 动画的起始值 To - 动画的结束值 By - 动画从起始值开始计算,所需变化的总量(To 优先于 By) Duration - 时间线的持续时间 TimeSpan - [-][日.]时:分:秒[.1位到7为的秒后的小数] Automatic - 自动确定 Forever - 无限长 AutoReverse - 动画完成后是否要原路返回。默认值为 false RepeatBehavior - 动画重复播放的时间、次数或类型 TimeSpan - [-][日.]时:分:秒[.1位到7为的秒后的小数] nx - 播放次数。1x, 2x, 3x Forever - 永久播放 SpeedRatio - 时间线的速率的倍数。默认值 1 FillBehavior - 动画结束后的行为 [System.Windows.Media.Animation.FillBehavior枚举] FillBehavior.HoldEnd - 动画结束后,保留动画属性的结束值。默认值 FillBehavior.Stop - 动画结束后,恢复动画属性为其初始值 --> < ColorAnimation Storyboard.TargetName ="ellipse" Storyboard.TargetProperty ="(Ellipse.Fill).(SolidColorBrush.Color)" BeginTime ="00:00:0" From ="Red" To ="Yellow" Duration ="Automatic" AutoReverse ="True" RepeatBehavior ="3x" > </ ColorAnimation > </ Storyboard > </ BeginStoryboard > </ EventTrigger > </ Ellipse.Triggers > </ Ellipse > </ StackPanel > </ UserControl >
2、DoubleAnimation.xaml
< UserControl x:Class ="Silverlight20.Animation.DoubleAnimation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml" > < StackPanel HorizontalAlignment ="Left" > < Rectangle x:Name ="rectangle" Width ="200" Height ="100" Stroke ="Black" StrokeThickness ="6" RadiusX ="25" RadiusY ="25" > < Rectangle.Fill > < ImageBrush ImageSource ="/Silverlight20;component/Images/Logo.jpg" Stretch ="Fill" /> </ Rectangle.Fill > </ Rectangle > < StackPanel.Resources > < BeginStoryboard x:Name ="beginStoryboard" > < Storyboard x:Name ="storyboard" > <!-- DoubleAnimation - 在两个 Double 值之间做线性内插动画处理 --> <!-- Storyboard.TargetName - 要进行动画处理的对象的名称 Storyboard.TargetProperty - 要进行动画处理的对象的属性 BeginTime - 时间线在被触发 BeginTime 的时间后才能开始播放 TimeSpan - [-][日.]时:分:秒[.1位到7为的秒后的小数](可为正;可为负;可为空;默认值为 0) From - 动画的起始值 To - 动画的结束值 By - 动画从起始值开始计算,所需变化的总量(To 优先于 By) Duration - 时间线的持续时间 TimeSpan - [-][日.]时:分:秒[.1位到7为的秒后的小数] Automatic - 自动确定 Forever - 无限长 AutoReverse - 动画完成后是否要原路返回。默认值为 false RepeatBehavior - 动画重复播放的时间、次数或类型 TimeSpan - [-][日.]时:分:秒[.1位到7为的秒后的小数] nx - 播放次数。1x, 2x, 3x Forever - 永久播放 SpeedRatio - 时间线的速率的倍数。默认值 1 FillBehavior - 动画结束后的行为 [System.Windows.Media.Animation.FillBehavior枚举] FillBehavior.HoldEnd - 动画结束后,保留动画属性的结束值。默认值 FillBehavior.Stop - 动画结束后,恢复动画属性为其初始值 --> < DoubleAnimation Storyboard.TargetName ="rectangle" Storyboard.TargetProperty ="Width" From="100" By="100" BeginTime="0:0:3" Duration="00:00:03" AutoReverse="False" RepeatBehavior="Forever" > </ DoubleAnimation > </ Storyboard > </ BeginStoryboard > </ StackPanel.Resources > </ StackPanel > </ UserControl >
3、PointAnimation.xaml
< UserControl x:Class ="Silverlight20.Animation.PointAnimation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml" > < StackPanel HorizontalAlignment ="Left" > < StackPanel Orientation ="Horizontal" > < Button Click ="Animation_Begin" Width ="65" Height ="30" Margin ="2" Content ="Begin" /> < Button Click ="Animation_Pause" Width ="65" Height ="30" Margin ="2" Content ="Pause" /> < Button Click ="Animation_Resume" Width ="65" Height ="30" Margin ="2" Content ="Resume" /> < Button Click ="Animation_Stop" Width ="65" Height ="30" Margin ="2" Content ="Stop" /> </ StackPanel > < Path Fill ="Red" > < Path.Data > < EllipseGeometry x:Name ="ellipseGeometry" Center ="50,50" RadiusX ="15" RadiusY ="15" /> </ Path.Data > </ Path > < StackPanel.Resources > < Storyboard x:Name ="storyboard" > <!-- PointAnimation - 在两个 Point 值之间做线性内插动画处理 --> <!-- Storyboard.TargetName - 要进行动画处理的对象的名称 Storyboard.TargetProperty - 要进行动画处理的对象的属性 BeginTime - 时间线在被触发 BeginTime 的时间后才能开始播放 TimeSpan - [-][日.]时:分:秒[.1位到7为的秒后的小数](可为正;可为负;可为空;默认值为 0) From - 动画的起始值 To - 动画的结束值 By - 动画从起始值开始计算,所需变化的总量(To 优先于 By) Duration - 时间线的持续时间 TimeSpan - [-][日.]时:分:秒[.1位到7为的秒后的小数] Automatic - 自动确定 Forever - 无限长 AutoReverse - 动画完成后是否要原路返回。默认值为 false RepeatBehavior - 动画重复播放的时间、次数或类型 TimeSpan - [-][日.]时:分:秒[.1位到7为的秒后的小数] nx - 播放次数。1x, 2x, 3x Forever - 永久播放 SpeedRatio - 时间线的速率的倍数。默认值 1 FillBehavior - 动画结束后的行为 [System.Windows.Media.Animation.FillBehavior枚举] FillBehavior.HoldEnd - 动画结束后,保留动画属性的结束值。默认值 FillBehavior.Stop - 动画结束后,恢复动画属性为其初始值 --> < PointAnimation Storyboard.TargetName ="ellipseGeometry" Storyboard.TargetProperty="Center" BeginTime="00:00:00" From="50,50" To="300,500" Duration="0:0:3" AutoReverse="True" RepeatBehavior="00:00:10" > </ PointAnimation > </ Storyboard > </ StackPanel.Resources > </ StackPanel > </ UserControl >
PointAnimation.xaml.cs
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace Silverlight20.Animation
4、KeyFrame.xaml
< UserControl x:Class ="Silverlight20.Animation.KeyFrame" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml" > < StackPanel HorizontalAlignment ="Left" > <!-- ColorAnimationUsingKeyFrames - 在一组 KeyFrame 中所设置的多个 Color 值之间做动画处理 DoubleAnimationUsingKeyFrames - 在一组 KeyFrame 中所设置的多个 Double 值之间做动画处理 PointAnimationUsingKeyFrames - 在一组 KeyFrame 中所设置的多个 Point 值之间做动画处理 --> <!-- LinearColorKeyFrame - 在前一个关键帧的 Color 值及其自己的 Value 之间进行线性内插动画处理 DiscreteColorKeyFrame - 在前一个关键帧的 Color 值及其自己的 Value 之间进行离散内插动画处理 SplineColorKeyFrame - 在前一个关键帧的 Color 值及其自己的 Value 之间按 三次贝塞尔曲线 进行内插动画处理 LinearDoubleKeyFrame - 在前一个关键帧的 Double 值及其自己的 Value 之间进行线性内插动画处理 DiscreteDoubleKeyFrame - 在前一个关键帧的 Double 值及其自己的 Value 之间进行离散内插动画处理 SplineDoubleKeyFrame - 在前一个关键帧的 Double 值及其自己的 Value 之间按 三次贝塞尔曲线 进行内插动画处理 LinearPointKeyFrame - 在前一个关键帧的 Point 值及其自己的 Value 之间进行线性内插动画处理 DiscretePointKeyFrame - 在前一个关键帧的 Point 值及其自己的 Value 之间进行离散内插动画处理 SplinePointKeyFrame - 在前一个关键帧的 Point 值及其自己的 Value 之间按 三次贝塞尔曲线 进行内插动画处理 --> <!-- Value - 关键帧的目标值 KeyTime - 到达关键帧目标值的时间 KeySpline - 三次贝塞尔曲线的两个控制点:x1,y1 x2,y2(该三次贝塞尔曲线的起点为0,0,终点为1,1) --> < Grid Margin ="5" > < Grid.Resources > < Storyboard x:Name ="caStoryboard" > < ColorAnimationUsingKeyFrames Storyboard.TargetName ="caBrush" Storyboard.TargetProperty="Color" Duration="0:0:10" > < LinearColorKeyFrame Value ="Green" KeyTime ="0:0:3" /> < DiscreteColorKeyFrame Value ="Blue" KeyTime ="0:0:4" /> < SplineColorKeyFrame Value ="Red" KeySpline ="0.6,0.0 0.9,0.00" KeyTime ="0:0:6" /> </ ColorAnimationUsingKeyFrames > </ Storyboard > </ Grid.Resources > < Rectangle x:Name ="caRectangle" MouseLeftButtonDown ="caRectangle_MouseLeftButtonDown" Width ="100" Height ="50" > < Rectangle.Fill > < SolidColorBrush x:Name ="caBrush" Color ="Red" /> </ Rectangle.Fill > </ Rectangle > </ Grid > < Grid Margin ="5" > < Grid.Resources > < Storyboard x:Name ="daStoryboard" > < DoubleAnimationUsingKeyFrames Storyboard.TargetName ="daTransform" Storyboard.TargetProperty="X" Duration="0:0:10" > < LinearDoubleKeyFrame Value ="500" KeyTime ="0:0:3" /> < DiscreteDoubleKeyFrame Value ="400" KeyTime ="0:0:4" /> < SplineDoubleKeyFrame Value ="0" KeySpline ="0.6,0.0 0.9,0.00" KeyTime ="0:0:6" /> </ DoubleAnimationUsingKeyFrames > </ Storyboard > </ Grid.Resources > < Rectangle x:Name ="daRectangle" MouseLeftButtonDown ="daRectangle_MouseLeftButtonDown" Fill ="Red" Width ="100" Height ="50" > < Rectangle.RenderTransform > < TranslateTransform x:Name ="daTransform" X ="0" Y ="0" /> </ Rectangle.RenderTransform > </ Rectangle > </ Grid > < Grid Margin ="5" > < Grid.Resources > < Storyboard x:Name ="paStoryboard" > < PointAnimationUsingKeyFrames Storyboard.TargetName ="paGeometry" Storyboard.TargetProperty="Center" Duration="0:0:10" > < LinearPointKeyFrame Value ="100,100" KeyTime ="0:0:3" /> < DiscretePointKeyFrame Value ="200,200" KeyTime ="0:0:4" /> < SplinePointKeyFrame Value ="50,50" KeySpline ="0.6,0.0 0.9,0.00" KeyTime ="0:0:6" /> </ PointAnimationUsingKeyFrames > </ Storyboard > </ Grid.Resources > < Path Fill ="Red" MouseLeftButtonDown ="paPath_MouseLeftButtonDown" > < Path.Data > < EllipseGeometry x:Name ="paGeometry" Center ="50,50" RadiusX ="15" RadiusY ="15" /> </ Path.Data > </ Path > </ Grid > </ StackPanel > </ UserControl >
KeyFrame.xaml.cs
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace Silverlight20.Animation
5、Programmatically.xaml
< UserControl x:Class ="Silverlight20.Animation.Programmatically" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml" > < StackPanel HorizontalAlignment ="Left" > <!-- MouseLeftButtonDown - 在该Canvas上单击鼠标后所执行的事件 --> < Canvas x:Name ="canvas" Background ="Yellow" Width ="640" Height ="480" MouseLeftButtonDown ="Canvas_MouseLeftButtonDown" > < Path Fill ="Red" > < Path.Data > < EllipseGeometry x:Name ="ellipseGeometry" Center ="200,100" RadiusX ="15" RadiusY ="15" /> </ Path.Data > </ Path > </ Canvas > < StackPanel.Resources > < Storyboard x:Name ="storyboard" > < PointAnimation x:Name ="pointAnimation" Storyboard.TargetProperty="Center" Storyboard.TargetName="ellipseGeometry" Duration="0:0:2" /> </ Storyboard > </ StackPanel.Resources > </ StackPanel > </ UserControl >
Programmatically.xaml.cs
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace Silverlight20.Animation
相关文章: