话说,总结应该是个收获的心情,可现在的自己似乎没感觉到哪个喜悦的心情,说明自己做得还不够好,现在还是把一些做好的东西总结下。“总结”是学习,工作中必须的,不能偷这个懒 o(╯□╰)o

实现上下循环移动的关键代码是:

首先创建一个计时器

            rollTimer = new DispatcherTimer();
rollTimer.Interval = TimeSpan.FromMilliseconds();
rollTimer.Tick += new EventHandler(rollTimer_Tick);
rollTimer.Start();

此计时器设置的间隔期是1秒 也就是说1秒后会触发此事件rollTimer_Tick,然后我在此事件中,让球从上往下移动(用时0.5秒),然后此动画(故事板Storyboard)结束后,触发另一个事件(这个事件的控制是,让球从下往上移动,用时0.5秒),这样在这1秒中,球就实现了,上下循环移动。然后计时器的控制,可隔1秒后触发rollTimer_Tick事件,也就是说能让它循环。到一定的时间,将计时器停止就可将该事件停止。

rollTimer_Tick中的关键代码为:

 public void rollTimer_Tick(object sender,EventArgs e)
{
DoubleAnimation da = new DoubleAnimation();
da.From = ;
da.To = ;
da.Duration = new Duration(TimeSpan.FromSeconds(0.5));
Storyboard.SetTarget(da, ellipse);
sbd.Completed += new EventHandler(sbd_Completed);
sbd.FillBehavior = FillBehavior.HoldEnd;
sbd.Children.Add(da);
sbd.Begin();
}

故事板结束后触发的事件sbd_Completed为:

  #region 下半部分,使其由下往上移动
private void sbd_Completed(object sender, EventArgs e)
{
if (i == )
{
rollTimer.Stop();
NumTimer.Stop();
}
else
{
sbd.Stop();
sbd.Children.Clear();
DoubleAnimation da = new DoubleAnimation();
da.From = ;
da.To = ;
da.Duration = new Duration(TimeSpan.FromSeconds(0.5));
Storyboard.SetTarget(da, ellipse); Storyboard.SetTargetProperty(da, new PropertyPath(Canvas.TopProperty));
sbd.FillBehavior = FillBehavior.HoldEnd;
sbd.Children.Add(da);
sbd.Children.Add(da11);
sbd.Begin();
}
}

实现左右移动的关键代码是:

能实现上下移动,左右移动也就同理了,只要改变一下  Storyboard.SetTargetProperty(da11, new PropertyPath(Canvas.TopProperty));  这个代码,让Canvas.TopProperty 变为Canvas.LeftProperty即可。

            Storyboard sbd = new Storyboard();
DoubleAnimation da = new DoubleAnimation();
da.From = ;
da.To = ;
da.Duration = new Duration(TimeSpan.FromSeconds());
Storyboard.SetTarget(da, ellipse5);
Storyboard.SetTargetProperty(da, new PropertyPath (Canvas.LeftProperty));
sbd.Children.Add(da);

实现旋转的关键代码是:
 首先看下我xaml的布局,对球是这样设计的

<Ellipse x:Name="ellipse5" Canvas.Top="" Canvas.Left="" Width="" Height=""  Stroke="Black" StrokeThickness="" >
<Ellipse.Fill>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Offset="" Color="#E2E0C8" />
<GradientStop Offset="" Color="#FFFF00" />
<GradientStop Offset="0.4" Color="#978B00"/>
<GradientStop Offset="0.6" Color="#686001"/>
<GradientStop Offset="0.8" Color="#978B00"/>
</LinearGradientBrush>
</Ellipse.Fill>
<Ellipse.RenderTransform>
<RotateTransform Angle="" CenterX="" CenterY=""></RotateTransform>
</Ellipse.RenderTransform>
</Ellipse>

这一行代码 <RotateTransform Angle="0" CenterX="25" CenterY="25"></RotateTransform> 是设置球的旋转中心,旋转中心的设置为 CenterX=25,CenterY=25 而这个的设置又是球的Width="55" Height="55",照理来说应该是其一半,所以其实25是有点不精确的 \(^o^)/~

后台控制其旋转的代码为:

            DoubleAnimation da11 = new DoubleAnimation();
da11.From = ;
da11.To = ;
da11.Duration = new Duration(TimeSpan.FromSeconds());
Storyboard.SetTarget(da11, ellipse5);
Storyboard.SetTargetProperty(da11, new PropertyPath("(Ellipse.RenderTransform).(RotateTransform.Angle)"));

注意不同的点: From=0,To=360  和 Storyboard.SetTargetProperty(da11, new PropertyPath("(Ellipse.RenderTransform).(RotateTransform.Angle)")); 这样也就控制了其角度从0度旋转到360度,看起来也就像是圆的旋转咯。

最后效果图:

虽然看不出动画效果,嗯,我是想纪念下我实现了我想要的效果,O(∩_∩)O哈哈~

silverlight中 Storyboard(动画)的使用,实现球的上下循环移动,左右移动,及旋转功能的更多相关文章

  1. Silverlight & Blend动画设计系列十:Silverlight中的坐标系统(Coordinate System)与向量(Vector)运动

    如果我们习惯于数学坐标系,那么对于Silverlight中的坐标系可能会有些不习惯.因为在Silverlight中的坐标系与Flash中的坐标系一样,一切都的颠倒的.在标准的数学坐标系中,X轴表示水平 ...

  2. Silverlight中动画的性能浅析

    Silverlight中提供了StoryBoard实现动画,可是StoryBoard的性能实在不敢恭维,特别是动画很大的时候,计算机的CPU和内存的狂增,如此一来性能实在太差,在默认的动画效果中动画实 ...

  3. Silverlight中的拖拽实现的图片上传

    原文 http://blog.csdn.net/dujingjing1230/article/details/5443003 在Silverlight中因为可以直接从系统的文件夹里面拖出来一个文件直接 ...

  4. WPF中的动画——(三)时间线(TimeLine)

    WPF中的动画——(三)时间线(TimeLine) 时间线(TimeLine)表示时间段. 它提供的属性可以让控制该时间段的长度.开始时间.重复次数.该时间段内时间进度的快慢等等.在WPF中内置了如下 ...

  5. Silverlight中图片显示

    silverlight中显示一个图片有很多的中方法,xaml中的image控件或者自定编写程序来生成image控件. silverlight中显示的图片只能是Bitmap, JPG, PNG(64位颜 ...

  6. Wpf(Storyboard)动画简单实例

    原文:Wpf(Storyboard)动画简单实例 动画的三种变换方式 RotateTransform:旋转变换变化值:CenterX围绕转的圆心横坐标 CenterY纵坐标 Angle旋转角度(角度正 ...

  7. 【WPF学习笔记】[转]周银辉之WPF中的动画 && 晓风影天之wpf动画——new PropertyPath属性链

    (一)WPF中的动画 动画无疑是WPF中最吸引人的特色之一,其可以像Flash一样平滑地播放并与程序逻辑进行很好的交互.这里我们讨论一下故事板. 在WPF中我们采用Storyboard(故事板)的方式 ...

  8. 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  9. 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

随机推荐

  1. Python socket (单线程)

    client, 客户端 code : 客户端主要方法, s.send(); s.sendall(); s.recv(); s.connect() class Client(object): def _ ...

  2. java变量

    java有四种变量: 成员变量:类成员,在类体内,但在任何方法或构造器之外. 局部变量:在一个代码块中声明并使用. 参数:方法或构造器的变量. 异常处理参数:和参数类似,只是异常处理的自变量而不是方法 ...

  3. vim插件神器spf13在Linux上的安装

    官网给出的安装办法很简单: curl http://j.mp/spf13-vim3 -L -o - | sh 可惜有问题: connection reset by peer 正确的姿势是: curl ...

  4. Software Testing hw2

    Fault的定义:可能导致系统或功能失效的异常条件(Abnormal condition that can cause an element or an item tofail.),可译为“故障”. ...

  5. petapoco 使用 MiniProfiler Glimpse监控

    PetaPoco是一款适用于.Net(window) 和Mono( linux )的微小.快速.单文件的微型ORM. MVC MiniProfiler是Stack Overflow团队设计的一款对AS ...

  6. xcode6如何支持空模板

    Single View Application 改成空模板的歩揍(xcode6.0.1): 1.删除info.plist 中的Main Storyboard file base name 选项 2.将 ...

  7. js学习笔记之一

    一.Javascript 中的对象 1. 建立自定义对象 方法1:对象={属性1:属性值1,属性2:属性值2……属性n:属性值n} 方法2:先定义构造函数,再new创建对象实例. 如: functio ...

  8. Android 客户端设计之环境考虑

    我做过两三个android客户端应用的整体设计和部分的编码,这里仅仅谈一下设计方面的故事(此乃原创2015:11:02). 做客户端设计,首先要考虑应用所在的环境,包括三方面:1 要设计的apk是在一 ...

  9. C#使用Timer.Interval指定时间间隔与指定时间执行事件

    C#中,Timer是一个定时器,它可以按照指定的时间间隔或者指定的时间执行一个事件. 指定时间间隔是指按特定的时间间隔,如每1分钟.每10分钟.每1个小时等执行指定事件: 指定时间是指每小时的第30分 ...

  10. [.NET领域驱动设计实战系列]专题九:DDD案例:网上书店AOP和站点地图的实现

    一.引言 在前面一专题介绍到,要让缓存生效还需要实现对AOP(面向切面编程)的支持.所以本专题将介绍了网上书店案例中AOP的实现.关于AOP的概念,大家可以参考文章:http://www.cnblog ...