在WPF动画编程中,最常用的动画处理方式是DoubleAnimation动画,但是随着你的开发经验越来越多,你会发现,有时候使用这个动画类会很麻烦,因为这个动画是封闭动画,也就是说在动画的时间间隔内,你不能对它做对应依赖属性的赋值操作,这让你很多时候止步于很好的想法。

  因为我们要求某个时刻动画能停止,属性能赋值新的值。所以WPF中提供StoryBoard,这个和IOS中StoryBoard概念有点像,故事版嘛,就是一大堆事情放在同一块进行统一处理,例如你对某个对象坐了多个属性的动画,这些动画就可以用一个StoryBoard统一管理,极其方便。下面博主写了一个StoryBoard的动画,描述一个矩形位置移动,相信在你以后的开发当中会经常用到。

  public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
Loaded += new RoutedEventHandler(Window1_Loaded);
}
Storyboard _sb = new Storyboard();
Rectangle rect1 = new Rectangle(); void Window1_Loaded(object sender, RoutedEventArgs e)
{
DoubleAnimation da = new DoubleAnimation()
{
From = ,
To = ,
FillBehavior = FillBehavior.Stop,
//AutoReverse = true,
//RepeatBehavior = RepeatBehavior.Forever,
Duration = TimeSpan.FromSeconds()
};
DoubleAnimation da1 = new DoubleAnimation()
{
From = ,
FillBehavior = FillBehavior.Stop,
To = ,
//RepeatBehavior = RepeatBehavior.Forever,
Duration = TimeSpan.FromSeconds()
};
Rectangle rect = new Rectangle(); rect.Width = rect.Height = ;
rect.Fill = Brushes.Blue;
_canvas.Children.Add(rect); rect1.Width = rect1.Height = ;
rect1.Fill = Brushes.Red;
_canvas.Children.Add(rect1); _sb.Children.Add(da);
Storyboard.SetTarget(da, rect);
Storyboard.SetTargetProperty(da, new PropertyPath(Canvas.LeftProperty));
_sb.Begin();
}
/// <summary>
/// 开始动画
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Click(object sender, RoutedEventArgs e)
{
bsCopy = _sb.Clone();
bsCopy.Children.Clear();
foreach (var item in _sb.Children)
{ bsCopy.Children.Add(item);
Storyboard.SetTarget(item, rect1);
Storyboard.SetTargetProperty(item, Storyboard.GetTargetProperty(item));
}
bsCopy.FillBehavior = FillBehavior.Stop;
bsCopy.Completed += delegate
{
int a = ;
Canvas.SetLeft(rect1, );
};
bsCopy.Begin();
}
/// <summary>
/// 停止动画
/// </summary>
Storyboard bsCopy;
private void Button_Click_1(object sender, RoutedEventArgs e)
{
bsCopy.Stop();
Canvas.SetLeft(rect1, );
}
}

使用StoryBoard执行动画的更多相关文章

  1. css3实现循环执行动画,且动画每次都有延迟

    一.最终效果 需求:gift图片的小动画每隔2s执行一次. 需求就一句话,我们看一下实现过程. 二.实现过程 1.网页结构 <!DOCTYPE html> <html lang=&q ...

  2. 随着ScrollView的滑动,渐渐的执行动画View

    今天是实现了一个小功能的东西.看看效果图: 实现方式: 1.自定义ScrollView   复写onScrollChange方法,来计算滑动的位置. 2.自定义接口,通过接口来在ScrollView中 ...

  3. jQuery使用伪递归重复执行动画

    使用setInterval()来重复执行动画,会因为动画执行过程的时候,setInterval()的时间依然是在走的,所以会导致动画的调用时间不理想,因此只能使用递归来重复执行动画. // 首页LOG ...

  4. 对于 NSLayoutConstraint 不执行动画的处理:

    在开发中  我们有时候需要改变某个空间的约束条件 也就是更改NSLayoutConstraint的值  (比如说我想在键盘顶部增加一个工具栏 让工具栏随着键盘的位置变化而变化  有一个动画效果)但是发 ...

  5. PageSlider中CSS3动画在除首屏之外先加载页面后执行动画的问题

    PageSlider中CSS3动画在除首屏之外先加载页面后执行动画的问题,PageSlider中加入CSS3动画的话,默认只有首屏是从无到有执行动画,其他屏都是显示下页面再执行动画 这就造成其他屏的动 ...

  6. 解决点击cell执行动画导致的重用问题

    解决点击cell执行动画导致的重用问题 说明: 动画的细节都是裸露的,并没有封装,靠看官来优化了. 效果: 源码: https://github.com/YouXianMing/UITableView ...

  7. 滑动cell的时候执行动画效果

    滑动cell的时候执行动画效果 效果图: 源码: // // ViewController.m // AniTab // // Created by XianMingYou on 15/2/26. / ...

  8. 按照vue文档使用JavaScript钩子但是却不能执行动画?

    大家刚入VUE肯定是先去阅读文档, 在 进入/离开 & 列表过渡 这一章节有一小节 ---------  JavaScript钩子 详情见vue文档:  https://cn.vuejs.or ...

  9. Android自定义控件3--优酷菜单执行动画

    在上篇文章中实现了优酷菜单的布局,本文接着实现动画功能 本文地址:http://www.cnblogs.com/wuyudong/p/5914901.html,转载请注明源地址. 新建动画工具类Ani ...

随机推荐

  1. XDS100V3连接Pandaboard ES OMAP4460开发板

    1. 硬件连接如下 2. 使用CCS创建工程,不过好像没有ARM9的内核吧?为啥会出现? 3. 创建目标配置文件 4. 不过确实有ARM9的内核,两个A9内核,一个DSP C64X内核,两个M3的内核 ...

  2. Electron小记

    一.安装 1.安装NodeJS 2.安装electronjs:npm install -g electron --unsafe-perm=true --allow-root 安装完,环境为: Node ...

  3. 【转】: 塞尔达组在GDC2017演讲的文字翻译:创新的勇气

    大家好,我是藤林秀麿,以导演的身份参与<荒野之息>的制作,感谢大家的出席.我曾经作为设计者和导演制作了诸多塞尔达游戏(大地与时空之章.缩小帽.四支剑.幻影沙漏.天空之剑),回首望去,我已经 ...

  4. Redis的数据类型以及每种数据类型的使用场景

    人就是很奇怪的动物,很简单的问题往往大家都容易忽略,当我们在使用分布式缓存Redis的时候,一个最简单的问题Redis的数据类型以及每种数据类型的使用场景是什么? 是不是觉得这个问题很基础?我也这么觉 ...

  5. 关于 WebView 知识点的详解

    什么是 WebView WebView 是手机中内置了一款高性能 webkit 内核浏览器,在 SDK 中封装的一个组件.没有提供地址栏和导航栏, WebView 只是单纯的展示一个网页界面.在开发中 ...

  6. 后端编程语言PHP

    | 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.PHP 简介 PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言. PHP 脚本在服务器上执行. 什么是 PHP?(超文本预处理器 ...

  7. 智能客服 对话实现--python aiml包

    利用了python的aiml包进行应答 什么是AIML? AIML是Richard Wallace开发的. 他开发了一个叫A.L.I.C.E(Artificial Linguistics Intern ...

  8. 【分层最短路】Joyride

    http://codeforces.com/gym/101873 C 多开一维状态记录时间,d[i][t] = 经过时间t走到节点i的最小花费 每一个状态分别向"原地等待"与&qu ...

  9. 【dp】New Keyboard

    http://codeforces.com/gym/101397 B dp[i][j][k]: i为前一个行动的状态,0-switch.1-type,j为当前状态layout的编号,k 是已键入的字符 ...

  10. HDU 5187 zhx's contest 快速幂,快速加

    题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5187 bc(中文): http://bestcoder.hdu.edu.cn/contes ...