原文: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动画结束后的行为方式的更多相关文章

  1. iOS 动画结束后 view的位置 待完善

    默认的动画属性,动画结束后,view会回到原始位置.但是如果设定了 CAAnimation的 removedOnCompletion 属性,那么view会保持这个位置!但是真实的接收 点击的frame ...

  2. CSS动画 防止动画结束后,回归原位

    animation-fill-mode防止动画结束后,回归原位 animation: arrowsfirst 1s; animation-timing-function: linear; animat ...

  3. css动画结束后 js无法修改translated值 .

    由于项目的需要,俺要做一些页面的转场动画. 即将是移动端,肯定是首先css动画了. 结果确发现,css动画中,如果设置animation-fill-mode: both;在动画结束后无法个性trans ...

  4. jquery动画函数里面可以跟一个回调函数,表示动画结束后执行的代码

    jquery动画函数里面可以跟一个回调函数,表示动画结束后执行的代码 使用js监听动画结束后进行的操作: $ele.fadeIn(300,function(){...}) $ele.fadeOut(3 ...

  5. WPF Blend 一个动画结束后另一个动画开始执行(一个一个执行)

    先说明思路:一个故事版Storyboard,两个双精度动画帧DoubleAnimation. 一个一个执行的原理:控制动画开始时间(例如第一个动画用时2秒,第二个动画就第2秒起开始执行.) XAML: ...

  6. WPF 动画执行后属性无法修改

    在做了一个类似QQ展开的动画时,设置了TopProperty,通过改变Window.Top属性来实现展开特效, 但是动画执行了之后,再去设置Window.Top的时候发现修改不了,代码调试后发现值设置 ...

  7. wpf动画概述

    http://msdn.microsoft.com/zh-cn/library/vstudio/ms752312(v=vs.100).aspx Windows Presentation Foundat ...

  8. silverlight,WPF动画终极攻略之迟来的第三章 动画整合篇(Blend 4开发)

    原文:silverlight,WPF动画终极攻略之迟来的第三章 动画整合篇(Blend 4开发) 有个问题想请教下大家,我仿了腾讯的SL版QQ,相似度95%以上.我想写成教程教大家怎么开发出来,会不会 ...

  9. JS如何监听动画结束

    场景描述 在使用JS控制动画时一般需要在动画结束后执行回调去进行DOM的相关操作,所以需要监听动画结束进行回调.JS提供了以下事件用于监听动画的结束,简单总结学习下. CSS3动画监听事件 trans ...

随机推荐

  1. Android平台中的三种翻页效果机器实现原理

    本文给开发者集中展现了Android平台中的三种翻页效果机器实现原理,希望能够对开发者有实际的帮助价值! 第一种翻页效果如下:     实现原理: 当前手指触摸点为a,则 a点坐标为(ax,ay), ...

  2. telnet不是内部命令也不是外部命令

    转自:https://www.cnblogs.com/sishang/p/6600977.html 处理办法: 依次打开“开始”→“控制面板”→“打开或关闭Windows功能”,在打开的窗口处,寻找并 ...

  3. 微信支付v2开发(4) 交易通知

    本文介绍如何使用JS API支付时如何获得交易通知. 一.交易通知 用户在成功完成支付后,微信后台通知(POST)商户服务器(notify_url)支付结果.商户可以使用notify_url的通知结果 ...

  4. iOS_04_数据类型、常量、变量

    一.数据 1.什么是数据 * 生活中时时刻刻都在跟数据打交道,比如体重数据.血压数据.股价数据等.在我们使用计算机的过程中,会接触到各种各样的数据,有文档数据,图片数据,视频数据,还有聊天QQ产生的文 ...

  5. JS版微信6.0分享接口用法分析

    本文实例讲述了JS版微信6.0分享接口用法.分享给大家供大家参考,具体如下: 为了净化网络,整顿诱导分享及诱导关注行为,微信于2014年12月30日发布了<微信公众平台关于整顿诱导分享及诱导关注 ...

  6. Vim 模式及常用命令整理

    VIM 命令     以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令.   vim的模式 基本上可以分为3种模式,分别是命令模式(command mode).插入模 ...

  7. HttpClient请求发送的几种用法二:

    public class HttpClientHelper    {        private static readonly HttpClientHelper _instance = new H ...

  8. HDU 1214 圆桌会议 圆环逆序

    http://acm.hdu.edu.cn/showproblem.php?pid=1214 题目大意: 一群人围着桌子座,如果在一分钟内一对相邻的人交换位置,问多少分钟后才能得到与原始状态相反的座位 ...

  9. Remove Duplicates from Sorted Array [Python]

    Given a sorted array, remove the duplicates in place such that each element appear only once and ret ...

  10. 公钥,私钥和数字签名这样最好理解 分类: B3_LINUX 2015-05-06 16:25 59人阅读 评论(0) 收藏

    一.公钥加密 假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥. 我有一个文件,不能让别人看,我就用1加密了.别人找到了这个 ...