使用StoryBoard执行动画
在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执行动画的更多相关文章
- css3实现循环执行动画,且动画每次都有延迟
一.最终效果 需求:gift图片的小动画每隔2s执行一次. 需求就一句话,我们看一下实现过程. 二.实现过程 1.网页结构 <!DOCTYPE html> <html lang=&q ...
- 随着ScrollView的滑动,渐渐的执行动画View
今天是实现了一个小功能的东西.看看效果图: 实现方式: 1.自定义ScrollView 复写onScrollChange方法,来计算滑动的位置. 2.自定义接口,通过接口来在ScrollView中 ...
- jQuery使用伪递归重复执行动画
使用setInterval()来重复执行动画,会因为动画执行过程的时候,setInterval()的时间依然是在走的,所以会导致动画的调用时间不理想,因此只能使用递归来重复执行动画. // 首页LOG ...
- 对于 NSLayoutConstraint 不执行动画的处理:
在开发中 我们有时候需要改变某个空间的约束条件 也就是更改NSLayoutConstraint的值 (比如说我想在键盘顶部增加一个工具栏 让工具栏随着键盘的位置变化而变化 有一个动画效果)但是发 ...
- PageSlider中CSS3动画在除首屏之外先加载页面后执行动画的问题
PageSlider中CSS3动画在除首屏之外先加载页面后执行动画的问题,PageSlider中加入CSS3动画的话,默认只有首屏是从无到有执行动画,其他屏都是显示下页面再执行动画 这就造成其他屏的动 ...
- 解决点击cell执行动画导致的重用问题
解决点击cell执行动画导致的重用问题 说明: 动画的细节都是裸露的,并没有封装,靠看官来优化了. 效果: 源码: https://github.com/YouXianMing/UITableView ...
- 滑动cell的时候执行动画效果
滑动cell的时候执行动画效果 效果图: 源码: // // ViewController.m // AniTab // // Created by XianMingYou on 15/2/26. / ...
- 按照vue文档使用JavaScript钩子但是却不能执行动画?
大家刚入VUE肯定是先去阅读文档, 在 进入/离开 & 列表过渡 这一章节有一小节 --------- JavaScript钩子 详情见vue文档: https://cn.vuejs.or ...
- Android自定义控件3--优酷菜单执行动画
在上篇文章中实现了优酷菜单的布局,本文接着实现动画功能 本文地址:http://www.cnblogs.com/wuyudong/p/5914901.html,转载请注明源地址. 新建动画工具类Ani ...
随机推荐
- 一个非常好用的PHP数组函数
array_column 该函数非常有用,在PHP 5.5中可直接调用. 有如下二维数组,如要抽取每个子数组中的特定项. <?php // Array representing a possib ...
- 海思NB-IOT的SDK函数使用说明
1. 查询当前AT指令是否正在处理中 while(get_at_cmd_in_progress() == false); 2. 信号量发送函数 (, osNoWait); 3. 信号量接收函数 if( ...
- Python运维三十六式:用Python写一个简单的监控系统
市面上有很多开源的监控系统:Cacti.Nagios.Zabbix.感觉都不符合我的需求,为什么不自己做一个呢? 用Python两个小时徒手撸了一个简易的监控系统,给大家分享一下,希望能对大家有所启发 ...
- 【springmvc+mybatis项目实战】杰信商贸-6.重点知识回顾
1.重点知识回顾 Maven1)覆盖仓库文件,实际企业开发,公司会架一个测试服务器,在测试服务器中架私服.我们开发人员的程序,都连接私服.当本地没有项目中要使用的jar,Myeclipse maven ...
- leetcode28_C++实现strStr()函数
实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存在,则返 ...
- IncDec序列:差分+贪心
IncDec序列 题目描述: 给定一个长度为 n 的数列 a1,a2,…,an,每次可以选择一个区间[l,r],使下标在这个区间内的数都加一或者都减一. 求至少需要多少次操作才能使数列中的所有数都一样 ...
- Paper Reading - Deep Captioning with Multimodal Recurrent Neural Networks ( m-RNN ) ( ICLR 2015 ) ★
Link of the Paper: https://arxiv.org/pdf/1412.6632.pdf Main Points: The authors propose a multimodal ...
- 关于kv的jch分片存储
确定节点同步一致 节点启动之后,先获取本地的addrbook里面的节点信息 根据获取的addrbook里面的节点信息进行校验(向addrbook里面的节点发送hash消息确认,如果都一样,则可以广播数 ...
- Leetcode_2. Add_Two_Number
2. Add_Two_Number 用两个非空链表分别表示两个非负整数,链表的节点表示数字的位,链表头表示数字的低位,链表尾表示数字高位.求两个链表所表示数字的和. 比如: Input: (2 -&g ...
- python request 获取cookies value值的方法
import requests res = requests.get(url) cookies = requests.utils.dict_from_cookiejar(res.cookies) pr ...