博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF动画结束后的行为方式
阅读量:5222 次
发布时间:2019-06-14

本文共 1625 字,大约阅读时间需要 5 分钟。

原文:

在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控件停留在当前位置}

posted on
2019-01-15 17:10 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/10273008.html

你可能感兴趣的文章
项目上传到github上
查看>>
GCD 之线程死锁
查看>>
NoSQL数据库常见分类
查看>>
JS小工具_字符串转16进制数组_02
查看>>
信息安全系统设计基础实验四—20135214万子惠20135227黄晓妍
查看>>
一题多解 之 Bat
查看>>
Java 内部类
查看>>
测试一个对象是否是类字符串
查看>>
{面试题7: 使用两个队列实现一个栈}
查看>>
[转]SQL中 OVER(PARTITION BY) 取上一条,下一条等
查看>>
前端开发就从认识浏览器开始 - 浏览器处理请求的过程
查看>>
【练习】使用事务和锁定语句
查看>>
centos7升级firefox的flash插件
查看>>
jmeter系列二(jmeter engine相关)
查看>>
前端页面设计问题小计
查看>>
一份超全超详细的 ADB 用法大全
查看>>
Spring定时任务(@Scheduled)
查看>>
WebView 调试
查看>>
IB使用
查看>>
Linux硬链接和软链接(符号链接)
查看>>