Silverlight动画显示Line线
目的:在silverlight中显示两点之间的连线,要求动画显示连线效果。
如果需实现动画效果不得不了解,Storyborad对象:
Storyboard
通过时间线控制动画,并为其子动画提供对象和属性目标信息。
<Storyboard ...>
oneOrMoreChildTimelines
</Storyboard>
|
值 |
描述 |
|---|---|
|
oneOrMoreChildTimelines |
从 Timeline 派生的以下对象元素中的一个或多个:Storyboard、ColorAnimation、ColorAnimationUsingKeyFrames、DoubleAnimation、DoubleAnimationUsingKeyFrames、PointAnimation或 PointAnimationUsingKeyFrames。 在运行时访问 Children 属性时,此处定义的对象元素成为 Children 集合的成员。 |
从微软官网上定义,我们可以知道这个Storyborad正是实现动画的一个重要的元素。
在对象加载或要启动、暂停、继续和停止动画时,可以使用 Storyboard 对象的交互式方法来自动启动演示图板。
Storyboard 是 Resources 属性唯一支持的资源类型。
从微软官网上我们得到这个东西需要可以定义一些诶设置在Canvas.Resources节点下,官网给出了一个Rectangle颜色变化的一个例子:
<Canvas
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Rectangle
x:Name="MyAnimatedRectangle"
Width="100"
Height="100"
Fill="Blue">
<Rectangle.Triggers> <!-- Animates the rectangle's opacity. -->
<EventTrigger RoutedEvent="Rectangle.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyAnimatedRectangle"
Storyboard.TargetProperty="Opacity"
From="1.0" To="0.0" Duration="0:0:5" AutoReverse="True" RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Rectangle.Triggers>
</Rectangle>
</Canvas>
示例解读:
在Canvas下有一个长100px宽100px的的Rectangle对象,在Rectangle的Targegers节点下,定义了一个动画规则,该动画是用来修改Rectangle的透明度(Opacity)属性的,
设置透明度在5秒内按照DoubleAnimation的方式从1.0变化到0.0,且不重复播放。
有了这样的一个例子,我们知道我们要实现Line动态显示效果,就必不可少要用到的对象有Storyboard对象,且要在该对象下制定一个修改X2,Y2的方式(是按照DoubleAnnimation还是ColorAnimation,还是其他方式)
下边我们定一个额Line让他初始化的点在500,500处,当开始启动播放时,从500,500一直画到(200,200)处:
private void myButton_Click(object sender, RoutedEventArgs e)
{
Line myLine = new Line(); myLine.X1 = ;
myLine.Y1 = ;
myLine.X2 = ;
myLine.Y2 = ; myLine.Stroke = new SolidColorBrush(Color.FromArgb(, , , ));
myLine.Fill = new SolidColorBrush(Color.FromArgb(, , , )); // 把矩形加入到Canvas中
this.cnsDesignerContainer.Children.Add(myLine); // 创建二个double型的动画,并设定播放时间为2秒
Duration duration = new Duration(TimeSpan.FromSeconds());
DoubleAnimation myDoubleAnimation1 = new DoubleAnimation();
DoubleAnimation myDoubleAnimation2 = new DoubleAnimation(); myDoubleAnimation1.Duration = duration;
myDoubleAnimation2.Duration = duration; // 创建故事版,并加入上面的二个double型动画
Storyboard sb = new Storyboard();
sb.Duration = duration; sb.Children.Add(myDoubleAnimation1);
sb.Children.Add(myDoubleAnimation2); // 设置动画的Target目标值
Storyboard.SetTarget(myDoubleAnimation1, myLine);
Storyboard.SetTarget(myDoubleAnimation2, myLine); // 设置动画的变化属性
Storyboard.SetTargetProperty(myDoubleAnimation1, new PropertyPath("(X2)"));
Storyboard.SetTargetProperty(myDoubleAnimation2, new PropertyPath("(Y2)")); myDoubleAnimation1.To = ;
myDoubleAnimation2.To = ; if (!cnsDesignerContainer.Resources.Contains("unique_id"))
{
// 将动画版加入Canvas资源,注意:这里的unique_id必须是资源中没有的唯一键
cnsDesignerContainer.Resources.Add("unique_id", sb);
sb.Completed += new EventHandler(sb_Completed); // 播放
sb.Begin();
}
else
{
sb = null;
cnsDesignerContainer.Children.Remove(myLine);
}
} void sb_Completed(object sender, EventArgs e)
{
// 播放完成后,移除资源,否则再次点击时将报错
cnsDesignerContainer.Resources.Remove("unique_id");
}
显示的效果正是画线的动画显示方式。
Silverlight动画显示Line线的更多相关文章
- Silverlight 动画详解
Animation规则 基于时间:你设置动画的初始状态,最终状态,及持续时间,Silverlight会计算帧速率. 作用于属性(properties):一个Silverlight动画只能做一件事情,在 ...
- cocos2dx 动画显示异常
最近遇到一个问题 好多cocostudio导出的动画 显示都会有异常 很明显的融合方式 把混合方式里面的 src 改成one dst 改成 one-src alpha 解决 后面附上同行的文章 浅显易 ...
- Js_动画显示背景图片
jAni是一个可以动画显示背景图片的jQuery插件.这个插件基本上是GIF动画的一个替代品,但是他有他的好处.所有浏览器都支持GIF形式的动画格式,而且也不需要额外的javaScript代码和标记. ...
- notepad++搜索结果不显示line XX的方法
在使用notepad++如果多次搜索,得到的结果中会出现多次line xx: line xx:,造成文件大量垃圾信息的存在,不利于找寻所需的内容,如下图. 对于这种情况, ...
- 基于css3的鼠标经过动画显示详情特效
之前为大家分享过一款基于jquery的手风琴显示详情,今天给大家分享基于css3的鼠标经过动画显示详情特效.这款实例鼠标经过的时候基于中间动画放大,效果非常不错,效果图如下: 在线预览 源码下载 ...
- silverlight DataGrid 显示篇
silverlight DataGrid 显示篇 分类: Silverlight2012-05-12 21:55 693人阅读 评论(0) 收藏 举报 datagridsilverlightbindi ...
- js进阶 13-3 jquery动画显示隐藏,滑动,淡入淡出的本质是什么
js进阶 13-3 jquery动画显示隐藏,滑动,淡入淡出的本质是什么 一.总结 一句话总结:分别改变display,高度,opacity透明度这三种属性. 1.fade系列函数有哪四个? fade ...
- WPF 动画显示控件
当我们要显示一个控件的时候,不仅仅要显示这个控件,还要有动画的效果. 主要用到了DoubleAnimation类. public static void ShowAnimation(object co ...
- 可以正确显示表格线的Grid item view
Android上要显示一个表格,没有Swing那么专门的JTable可用. 搜了下,一般用GridView,有诸多不便和需要自己实现的地方: 跟ListView一样的Adapter,getView的时 ...
随机推荐
- PHP实现远程下载文件到本地
PHP实现远程下载文件到本地 投稿:hebedich 字体:[增加 减小] 类型:转载 经常写采集器发布接口需要使用到远程附件的功能,所以自己写了一个PHP远程下载文件到本地的函数,一般情况下已经 ...
- 达内培训:php在线端口扫描器
达内培训:php在线端口扫描器 [来源] 达内 [编辑] 达内 [时间]2012-12-21 这个扫描器很简单.就是用了一个数组来定义端口的相关信息,原理就是用fsockopen函数连接,如 ...
- JMeter使用点滴
作为一款小巧易用的性能测试工具,JMeter不仅免费开源而且功能强大.易于扩展,如果有一定Java开发基础的话还可以在JMeter上做扩展开发新的插件等,几乎能满足各种性能测试需求,本文用于收集使用J ...
- MySQL并发调优和IO调优
一.myisam的IO调优1.myisam通常在每次写入后把索引的改变刷写到磁盘上.所以批处理通常会更快点.做到这点,可以通过LOCK TABLES,他可以把写入控制到对表解锁.还可以用delay_k ...
- Memcached原理深度分析详解
Memcached是 danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能.关于这个东 西,相信很多人都用过,本文意在通 ...
- 用Delphi“遥控”按钮
很多情况下,我们需要在程序中实现这样的功能:在自编写的程序里控制另外一软件中的某个按钮被按下.比如,有一天你在聊QQ时觉得烦了,那么就想写程序来帮你按下“发送”按钮,省得你自己一次次动手了.那么,这个 ...
- Delphi指针及其它(转)
一.指针:指向一个内存地址的变量或参数. 二.定义指针的方式如下: P: Pointer; //定义了可以指向任何类型的指针,Pointer 为无类型指针: Q, R: ^TType; //定义了指向 ...
- 蓝牙Host Controller Interface笔记
1.概述 HCI提供了一个统一的使用蓝牙控制器(BR/EDR Controller,BR/EDR/LE Controller,LE Controller,AMP Controller等)的方法 ...
- Bulk Insert & BCP执行效率对比
我们以BCP导出的CSV数据文件,分别使用Bulk insert与BCP导入数据库,对比两种方法执行效率 备注:导入目标表创建了分区聚集索引 1.BCP导出csv数据文件 数据量:15000000行, ...
- Sublime Text3 protobuf syntax file(语法文件)
将以下两个文件放置在X:XXX\Sublime Text 3x64\Data\Packages\User目录下,就可以为sublime3添加protobuf文件的语法高亮规则. 文件名:Protobu ...