WPF动画结束后的行为方式
在WPF中可以使用Animation来完成动画功能,如移动,旋转等,最近写的一个程序需要实现控件的移动,包括自动移动和手动控制。原理很简单,就是改变控件的Margin属性。自动移动就是通过一个ThicknessAnimation的From 和To属性来控制Margin
Storyboard sbQue = new Storyboard();
ThicknessAnimation ta = new ThicknessAnimation();
ta.From = new Thickness(0,0,0,0);
ta.To = new Thickness(100,100,0,0);
ta.Duration = TimeSpan.FromMilliseconds(3000);
Storyboard.SetTarget(ta,Grid1)
Storyboard.SetTargetProperty(ta, new PropertyPath("(Grid.Margin)"));
sbQue.Children.Add(ta);
sbQue.Begin();
手动就是直接修改Margin属性。
Grid1.Margin = new Thickness(Grid1.Margin.Left-1,Grid1.Margin.Top,0,0) //向左移动一个像素
但是我发现一个问题:当用动画控制控件移动后,便无法再使用手动方式修改控件的Margin。原因是没有设置Storyboard的FillBehavior 属性。
FillBehavior 枚举如下,默认是HoldEnd,即动画结束后,继续重写动画目标属性,所有通过其他方法设置目标属性的值不起任何作用
如果想在动画停止后更改控件的属性,需要把FillBehavior属性设置为Stop,但是又会出现一个问题,控件的属性会恢复初始值,比如一个动画把Margin.Left的属性从0变为100,当动画开始后,控件的位置会移动,但是动画结束后,Margin.Left属性又恢复到了0,控件又回到了初始位置。
想要控件在动画结束后停留在原位,还需好设置Storyboard的Completed事件。
Storyboard sbQue = new Storyboard();
ThicknessAnimation ta = new ThicknessAnimation();
ta.From = new Thickness(0,0,0,0);
ta.To = new Thickness(100,100,0,0); //从(0,0,0,0)移动到(100,100,0,0)
ta.Duration = TimeSpan.FromMilliseconds(3000);
Storyboard.SetTarget(ta,Grid1)
Storyboard.SetTargetProperty(ta, new PropertyPath("(Grid.Margin)")); //把动画设置到Grid的Margin属性
sbQue.Children.Add(ta);
sbQue.FillBehavior = FillBehavior.Stop;
sbQue.Completed+= SbQueOnCompleted; //设置动画结束后的事件
sbQue.Begin();
private void SbQueOnCompleted(object sender, EventArgs eventArgs)
{
Grid1.Margin = new Thickness(100,100, 0, 0); //d控件停留在当前位置
}
WPF动画结束后的行为方式的更多相关文章
- iOS 动画结束后 view的位置 待完善
默认的动画属性,动画结束后,view会回到原始位置.但是如果设定了 CAAnimation的 removedOnCompletion 属性,那么view会保持这个位置!但是真实的接收 点击的frame ...
- CSS动画 防止动画结束后,回归原位
animation-fill-mode防止动画结束后,回归原位 animation: arrowsfirst 1s; animation-timing-function: linear; animat ...
- css动画结束后 js无法修改translated值 .
由于项目的需要,俺要做一些页面的转场动画. 即将是移动端,肯定是首先css动画了. 结果确发现,css动画中,如果设置animation-fill-mode: both;在动画结束后无法个性trans ...
- jquery动画函数里面可以跟一个回调函数,表示动画结束后执行的代码
jquery动画函数里面可以跟一个回调函数,表示动画结束后执行的代码 使用js监听动画结束后进行的操作: $ele.fadeIn(300,function(){...}) $ele.fadeOut(3 ...
- WPF Blend 一个动画结束后另一个动画开始执行(一个一个执行)
先说明思路:一个故事版Storyboard,两个双精度动画帧DoubleAnimation. 一个一个执行的原理:控制动画开始时间(例如第一个动画用时2秒,第二个动画就第2秒起开始执行.) XAML: ...
- WPF 动画执行后属性无法修改
在做了一个类似QQ展开的动画时,设置了TopProperty,通过改变Window.Top属性来实现展开特效, 但是动画执行了之后,再去设置Window.Top的时候发现修改不了,代码调试后发现值设置 ...
- wpf动画概述
http://msdn.microsoft.com/zh-cn/library/vstudio/ms752312(v=vs.100).aspx Windows Presentation Foundat ...
- silverlight,WPF动画终极攻略之迟来的第三章 动画整合篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之迟来的第三章 动画整合篇(Blend 4开发) 有个问题想请教下大家,我仿了腾讯的SL版QQ,相似度95%以上.我想写成教程教大家怎么开发出来,会不会 ...
- JS如何监听动画结束
场景描述 在使用JS控制动画时一般需要在动画结束后执行回调去进行DOM的相关操作,所以需要监听动画结束进行回调.JS提供了以下事件用于监听动画的结束,简单总结学习下. CSS3动画监听事件 trans ...
随机推荐
- Docker---(8)Docker启动Redis后访问不了
原文:Docker---(8)Docker启动Redis后访问不了 版权声明:欢迎转载,请标明出处,如有问题,欢迎指正!谢谢!微信:w1186355422 https://blog.csdn.net/ ...
- 【例题 6-20 UVA - 1599】Ideal Path
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 逆向做一遍bfs. 得到终点到某个点的最短距离. 这样,我们从起点顺序的时候. 就能知道最短路的下一步是要走哪里了. 这样,我们从起 ...
- 学习Java必看书籍和步骤
Java语言基础 谈到Java语言基础学习的书籍,大家肯定会推荐Bruce Eckel的<ThinkinginJava>.它是一本写的相当深刻的技术书籍,Java语言基础部分基本没有其它 ...
- 并发,two
引言 为了更加形象的描述并发的基础知识,因此本文LZ采用了园子里一度大火的标题形式--"没听说过XXXX,就不要说你XXXX了".希望能够给猿友们一个醒目的警醒,借此来普及并发的基 ...
- java——数组
数组是多个同样数据类型数组组合,当中数据类型是不论什么数据类型. 数组变量是引用类型变量,数组能够作为对象,数组中的每个元素相当于对象的成员变量,所以数组元素能够默认初始化.(博客java--变量分类 ...
- amazeui页面分析4
amazeui页面分析4 一.总结 1.直接照着作者的设计思路用:例如 pet_hd_con_time pet_hd_con_map ,这是time 和 map,那我别的说不定也可以直接用,比如aut ...
- MyEclipse中 使用svn更新jar包 出现 svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted 导致整个svn异常处理
svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted 2014-07-02 ...
- 如何获取已经安装到苹果手机上的App信息
//如何获取已经安装到苹果手机上的App信息? Is it possible to get the information (app icon, app name, app location) abo ...
- 服务器负载均衡lvs(Linux Virtual Server)
服务器负载均衡lvs(Linux Virtual Server) 一.总结 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统. 三.Linu ...
- Mariadb配置文件优化参数(仅供参考)
[client]#password= your_passwordport= 3306 socket= /tmp/mysql.sock!includedir /opt/local/mys ...