在实际项目中,我们通常会在XAML代码中创建控件的动画效果,但在某一些特殊情况下,需要后台进行动画效果的自定义修改。那么我们就需要用到本节中讲述的相关动画效果自创建知识。在Silverlight中常用的动画创建方式有4种分别为DoubleAnimation,ColorAnimation,PointAnimation,DoubleAnimationUsingKeyFrames。

    •DoubleAnimation是控制控件的某一些Double值的属性的变化来形成动画的,比如让某个空间的Opactiy变大变小,就是透明度变大变小。
    •ColorAnimation是控制控件的颜色的渐变,从绿色变蓝色。
    •PointAnimation是控制控件的Point点位置的变化而操作控件的动画效果的。如本例中的中心点位置
    •DoubleAnimationUsingKeyFrames 这个是添加帧片段,在这些片段中控制了某个控件的某一些属性在时间轴上的变化

DoubleAnimation,ColorAnimation,PointAnimation这三种动画基本上都有以下相似的属性:

    •TargetName(要进行动画动画处理的对象的名称)

    •TargetProperty(要进行动画动画处理的对象的属性)

    •BeginTime (触发动画的时间点)

    •From( 动画的起始值)

    •To(动画的结束值)

    •By(动画从起始值动画起始计算所需变化的总量)

    •Duration(时间线的持续时间)

    •RepeatBehavior (动画重复播放动画播放的时间、次数或类型)
        DoubleAnimationUsingKeyFrames动画则是其内部可以添加多种动画类型的关键帧分别是ColorAnimationUsingKeyFrames 、DoubleAnimationUsingKeyFrames 、PointAnimationUsingKeyFrames 等等,在这里不过多详述。

现在我们首先看一个XAML文件,这里有4个按钮和4个可控制的控件通过点击不同的按钮我们调用不同的动画:

<Canvas x:Name="LayoutRoot" Background="White">
<Rectangle RadiusX="5" RadiusY="5" Fill="#FFE8BE59" Height="92" Name="rectangle1" Stroke="Black" StrokeThickness="1" Width="148" Canvas.Left="47" Canvas.Top="76" />
<Button Canvas.Left="47" Canvas.Top="195" Content="开始DoubleAnimation动画" Height="23" Name="button1" Width="148" Click="button1_Click" />
<Rectangle Canvas.Left="231" Canvas.Top="76" Fill="Green" Height="92" Name="rectangle2" RadiusX="5" RadiusY="5" Stroke="Black" StrokeThickness="1" Width="148" />
<Rectangle Canvas.Left="414" Canvas.Top="76" Fill="DarkGoldenrod" Height="92" Name="rect" Opacity="0.1" RadiusX="5" RadiusY="5" Stroke="Black" StrokeThickness="1" Width="148" />
<Button Canvas.Left="414" Canvas.Top="195" Content="开始ColorAnimation动画" Height="23" Name="button2" Width="148" Click="button2_Click" />
<Button Canvas.Left="231" Canvas.Top="195" Content="开始ColorAnimation动画" Height="23" Name="button3" Width="148" Click="button3_Click" />
<Button Canvas.Left="593" Canvas.Top="195" Content="开始PointAnimation动画" Height="23" Name="button4" Width="148" Click="button4_Click" />
<Ellipse Canvas.Left="579" Canvas.Top="76" Height="92" Name="ellipse1" Fill="Blue" Stroke="Black" StrokeThickness="1" Width="183" >
<Ellipse.Clip>
<EllipseGeometry Center="100,100" x:Name="elgeome" RadiusX="90" RadiusY="60" />
</Ellipse.Clip>
</Ellipse>
</Canvas>

现在我们看MainPage.xaml.cs文件。在本代码中进行了相关的动画操作。我们再创建4个全局的故事板:

//装载DoubleAnimation动画的故事板
Storyboard sboard = new Storyboard();
//装载ColorAnimation动画的故事板
Storyboard colorboard = new Storyboard();
//装载DoubleAnimationUsingKeyFrames动画的故事板
Storyboard keyFrameboard = new Storyboard();
//装载PointAnimation动画的故事板
Storyboard pointboard = new Storyboard();

DoubleAnimation类型动画的后台代码创建以及操作:

#region 后台代码添加DoubleAnimation动画
DoubleAnimation danima = new DoubleAnimation();
//设置rectangle1矩形控件的透明度的Double类型数字变化
danima.SetValue(Storyboard.TargetNameProperty, "rectangle1");
danima.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("UIElement.Opacity"));
//透明度从0.1到1
danima.From = 0.1;
danima.To = 1;
danima.Duration = new Duration(new TimeSpan(0, 0, 5));
sboard.Children.Add(danima);
this.LayoutRoot.Resources.Add("Storyboard", sboard);
#endregion

ColorAnimation类型动画的后台代码创建以及操作:

#region 后台代码添加ColorAnimation动画
ColorAnimation coloranima = new ColorAnimation();
//设置rectangle2矩形控件的颜色的改变动画
coloranima.SetValue(Storyboard.TargetNameProperty, "rectangle2");
coloranima.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(Shape.Fill).(SolidColorBrush.Color)"));
//设置颜色动画从绿色变到蓝色
coloranima.From = Colors.Green;
coloranima.To = Colors.Blue;
colorboard.Children.Add(coloranima);
LayoutRoot.Resources.Add("colorboard", colorboard);
#endregion

PointAnimation类型动画的后台代码创建以及操作:

#region 后台代码添加PointAnimation动画
PointAnimation pointanima = new PointAnimation();
//EllipseGeometry的中心点的变化
pointanima.From = new Point(100, 100);
pointanima.To = new Point(200, 100);
//经过2秒的时间
pointanima.Duration = new TimeSpan(0, 0, 2);
//设置EllipseGeometry控件的中心点EllipseGeometry.CenterProperty位置的变化
Storyboard.SetTarget(pointanima, elgeome);
Storyboard.SetTargetProperty(pointanima, new PropertyPath(EllipseGeometry.CenterProperty));
pointboard.Children.Add(pointanima);
LayoutRoot.Resources.Add("pointboard", pointboard);
#endregion

DoubleAnimationUsingKeyFrames类型动画的后台代码创建以及操作:

#region 后台代码添加DoubleAnimationUsingKeyFrames动画
DoubleAnimationUsingKeyFrames dakeyframe = new DoubleAnimationUsingKeyFrames();
//设置rect矩形控件的Opacity透明度,并且开始动画事件为0秒的时候。
Storyboard.SetTarget(dakeyframe,rect);
Storyboard.SetTargetProperty(dakeyframe, new PropertyPath("UIElement.Opacity"));
dakeyframe.BeginTime = new TimeSpan(0, 0, 0);

//添加一个在第二秒的时候Opacity透明度值为1的关键帧
SplineDoubleKeyFrame SKeyFrame = new SplineDoubleKeyFrame();
SKeyFrame.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(2));
SKeyFrame.Value = 1;
dakeyframe.KeyFrames.Add(SKeyFrame);

//添加一个在第四秒的时候Opacity透明度值为0.1的关键帧
SplineDoubleKeyFrame SKeyFrame1 = new SplineDoubleKeyFrame();
SKeyFrame1.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(4));
SKeyFrame1.Value = 0.1;
dakeyframe.KeyFrames.Add(SKeyFrame1);

keyFrameboard.Children.Add(dakeyframe);
#endregion

以上就是4中动画的后台创建方式,相关的注释也在代码中,在这里就不一一解释。最后点击相应的按钮,运行相应的故事板Begin()方法开始动画。

本实例采用VS2010+Silverlight4.0编写。点击 SLAnimation.rar 下载本实例源码。预览图如下所示:

转载于:https://www.cnblogs.com/chengxingliang/archive/2011/03/07/1974436.html

Silverlight实用窍门系列:20.后台CS代码中创建四种常用的动画效果【附带源码实例】...相关推荐

  1. 后台CS代码中创建四种常用的SL动画效果

    http://www.cnblogs.com/chengxingliang/archive/2011/03/07/1974436.html后台CS代码中创建四种常用的动画效果[附带源码实例] 转载于: ...

  2. Silverlight实用窍门系列:29.Silverlight碰撞测试、检测自定义控件碰撞,雷达扫描图之扫描雷达点状态【附带源码实例】...

    雷达扫描图中当雷达指针转动扫描到某一个点上的时候,判断这个点的CPU值是否已经超过60的警戒位置如果超过将此点设置为红色. 在Silverlight中我们的雷达指针是一直在做圆运动的,我们要随时检测雷 ...

  3. 36.Silverlight中播放视频和打印文档【附带源码实例】

    在silverlight实际项目中时常会需要播放视频和打印文档,在本节中我们将制作一个最简单的播放视频和打印文档的实例. 一.播放WMV视频 首先我们创建一个Silverlight应用程序SLShow ...

  4. Silverlight实用窍门系列:59.多个中心点联动多线的可拖动控件扩展为拓扑图

    在本系列的第17篇文章中"Silverlight实用窍门系列:17.中心点联动多线的可拖动控件(绘制工程图.拓扑图基础) ",制作了基本的中心联动图标.有园友对此图的扩展不是很清晰 ...

  5. Silverlight实用窍门系列:71.Silverlight的Style

    此文章实例基于Silverlight实用窍门系列:68.Silverlight的资源字典ResourceDictionary,如有数据源疑问请参考该文章. 在Silverlight中的Style相当于 ...

  6. Silverlight实用窍门系列:14.Visifire图表控件的使用一(图表的创建和基础使用)【附带源码实例】...

    在实际项目开展中,往往会牵扯到需要绘制图表的情况.而Visifire是一个比较美观大方的第三方图表控件,本文会讲述如何初步使用Visifire控件. 首先我们需要从Visifire的官方网站下载:ht ...

  7. Silverlight实用窍门系列:52.Silverlight中的MVVM框架极速入门(以MVVM Light Toolkit为例)...

    在本文将以MVVM Light Toolkit为例讲解MVVM框架在现实中的使用入门,首先我们在http://mvvmlight.codeplex.com/下载它的MVVM框架下来.也可以通过 htt ...

  8. Silverlight实用窍门系列:61.Silverlight中的Trigger触发器,自定义翻页触发器

    在Silverlight应用程序和客户进行交互工作的时候可以不用写后台代码而通过Xaml代码来实现,在本文我们将学习了解Trigger触发器. Trigger触发器:引发动作的因素,比如鼠标点击.键盘 ...

  9. Silverlight实用窍门系列:47.Silverlight中元素到元素的绑定,以及ObservableCollection和List的使用区别...

    问题一:在某一些情况下,我们使用MVVM模式的时候,对于某一个字段(AgeField)需要在前台的很多个控件(A.B.C.D.E)进行绑定,但是如何能够让我们后台字段名改变的时候能够非常方便的改变所有 ...

  10. Silverlight实用窍门系列:40.Silverlight中捕捉视频,截图保存到本地

    在Silverlight中我们可以捕捉视频设备以制作视频会议系统,或者通过视频设备截图功能上传头像等功能. 下面我们通过一个简单的实例来访问视频设备,并且截取图像下载该截图文件至本地. 一.在Silv ...

最新文章

  1. BootstrapTable
  2. Eclipse设置文字大小
  3. WinRAR在DOS下压缩/解压缩的使用方法
  4. springboot 多数据源 读写分离 AOP方式
  5. Hive实践(hive0.12)
  6. 金融银行业机器学习—机遇、风险、案例
  7. java毕业设计餐饮类网站Mybatis+系统+数据库+调试部署
  8. Navicat 解决问题:提示No All Pattern Found File Already Patched?
  9. redis通过key模糊搜索_jedis模糊查询key
  10. 钱袋子往哪走?教你用Python爬取基金数据
  11. 大数据运维存档(5)HBaseKafka调优与排障
  12. 6个超实用的自媒体工具,百万博主都在用
  13. sentence-BERT
  14. 非自旋锁VS自旋锁和适应性自旋锁
  15. AxureRP Chrome谷歌浏览器插件安装流程(图文详解)
  16. 微信、博客和我的SAP B1
  17. Windows Defender Antivirus Service关闭方法
  18. python中多线程是真的还是假的_Python中的鸡肋多线程
  19. Canal的理解与应用
  20. 再谈哥德尔不完备定理

热门文章

  1. shell 练习(07)——MySQL 数据库备份
  2. 如何给域里的每台电脑分配一个***远程访问IP地址
  3. C++11 之for 新解
  4. VirtualBox centos下设置共享文件夹
  5. bash脚本基础概念注意点
  6. 一路风景之川藏线徒步笔记
  7. 2月6日 KNN和Bayes和决策树学习总结
  8. 8-汇编语言数据长度及寻址-bx/si/di/bp+ss+ptr+div+dd+dup
  9. Introduction to Conditional Random Fields
  10. C++--第27课 - 动态类型识别