在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. Kettle数据源连接配置

    说明: 通过(图3.1)我们可以看到创建数据源时需要配置相应的参数: Connection Name(必填):配置数据源使用名称,如:Rot_Source Host Name(必填):数据库主机IP地 ...

  2. Jmeter接口测试(一) Jmeter简介

    一.Jmeter介绍 (一)Jmeter简介 Apache JMeter 是 Apache 组织的开放源代码项目,是一个纯 Java 桌面应用,用于压力测试和性能测试.它最初被设计用于 Web 应用测 ...

  3. TPO-18 C2 Possible participation in a sociology project

    TPO-18 C2 Possible participation in a sociology project 第 1 段 1.listen to a conversation between a s ...

  4. vue cli 3 +jquery

    const webpack = require('webpack')module.exports = { // baseUrl type:{string} default:'/' // 将部署应用程序 ...

  5. linux云主机小技巧

    微信服务器安装 安装库 python 3.5环境下 pip安装web.py时 会报错 "no module named "utils" 等问题 更换命令为“pip ins ...

  6. 3.10-通过requests、BeautifulSoup、webbrowser模块的相关方法,爬取网页数据示例程序(一)

    import requests,bs4res=requests.get('https://www.hao123.com/')print('res对象的类型:',type(res))res.raise_ ...

  7. eclipse技巧-快捷键

    ctrl + 1,快速修复 ctrl + d, 快捷删除行 shift + Enter,快速移动光标到下一行 ctrl + F11,运行代码 alt + ↑/↓,快速移动行 ctrl + alt + ...

  8. USACO 1.2.2 Transformations 方块转换

    Description 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案.写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式: 1:转90度 ...

  9. A8

    组员:陈锦谋 今日内容: PS学习.抠图.图标像素调整 明日计划: 继续小组内安排的任务 困难: 无

  10. lintcode-389-判断数独是否合法

    389-判断数独是否合法 请判定一个数独是否有效. 该数独可能只填充了部分数字,其中缺少的数字用 . 表示. 注意事项 一个合法的数独(仅部分填充)并不一定是可解的.我们仅需使填充的空格有效即可. 说 ...