原文:WPF中的DoubleAnimation

WPF中的DoubleAnimation
                                                                                                                    周银辉

DoubleAnimation指定一个Double类型的属性,使其在指定的时间内由起点值到达终点值,从而形成动画效果.
应用它来实现动画效果,只要简单地指定几个参数值就可以了.
看下面的代码是改变一个按钮的大小的动画

 //指定长度变化的起点,终点与持续时间
            DoubleAnimation widthAnimation = 
                new DoubleAnimation(200, 400, new Duration(TimeSpan.FromSeconds(0.8)));

            //指定高度变化的起点,终点与持续时间
            DoubleAnimation heightAnimation = 
                new DoubleAnimation(50, 100, new Duration(TimeSpan.FromSeconds(0.8)));

            //开始动画
            //变化不是阻塞的,而是异步,所以看上去长度与高度几乎是同时变化
            btn.BeginAnimation(Button.WidthProperty, widthAnimation);
            btn.BeginAnimation(Button.HeightProperty, heightAnimation);

这样我们就可以得到一个简单的动画,它在0.8秒内将按钮的长度由200变化到400,高度由50变化到100.

但我们会发现当动画结束后,按钮的大小保持在(400,100), 如果我们需要动画结束后将按钮大小恢复到原大小,那么我们应该指定另外一个参数:
FillBehavior

//指定长度变化的起点,终点与持续时间,并在动画结束时恢复原值
            DoubleAnimation widthAnimation = 
                new DoubleAnimation(200, 400, new Duration(TimeSpan.FromSeconds(0.8)), FillBehavior.Stop);

            //指定高度变化的起点,终点与持续时间,并在动画结束时恢复原值
            DoubleAnimation heightAnimation = 
                new DoubleAnimation(50, 100, new Duration(TimeSpan.FromSeconds(0.8)), FillBehavior.Stop);

以下是完整的实例代码:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Windows.Media.Animation;


namespace DoubleAnimationTest
{
    /**//// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : System.Windows.Window
    {
       
        private Grid gridRoot;
        private Button buttonTest;

        public Window1()
        {
            IniComponent();
        }

        private void IniComponent()
        {
            this.gridRoot = new Grid();

            this.buttonTest = new Button();
            this.buttonTest.Content = "this is a test button";
            this.buttonTest.Width = 200;
            this.buttonTest.Height = 50;
            this.buttonTest.Click += new RoutedEventHandler(buttonTest_Click);
            this.gridRoot.Children.Add(this.buttonTest);

            this.Content = gridRoot;

        }

        void buttonTest_Click(object sender, RoutedEventArgs e)
        {
            Button btn = sender as Button;

            //指定长度变化的起点,终点与持续时间,并在动画结束时保持大小
            DoubleAnimation widthAnimation = 
                new DoubleAnimation(200, 400, new Duration(TimeSpan.FromSeconds(0.8)), FillBehavior.HoldEnd);

            //指定高度变化的起点,终点与持续时间,并在动画结束时保持大小
            DoubleAnimation heightAnimation = 
                new DoubleAnimation(50, 100, new Duration(TimeSpan.FromSeconds(0.8)), FillBehavior.HoldEnd);

            //开始动画
            //变化不是阻塞的,而是异步,所以看上去长度与高度几乎是同时变化
            btn.BeginAnimation(Button.WidthProperty, widthAnimation);
            btn.BeginAnimation(Button.HeightProperty, heightAnimation);

        }

    }


    public class MainClass
    {
        [STAThread]
        public static void Main()
        {
            Window1 win = new Window1();
            Application app = new Application();
            
            app.Run(win);
        }
    }
}

WPF中的DoubleAnimation的更多相关文章

  1. WPF中的动画——(三)时间线(TimeLine)

    WPF中的动画——(三)时间线(TimeLine) 时间线(TimeLine)表示时间段. 它提供的属性可以让控制该时间段的长度.开始时间.重复次数.该时间段内时间进度的快慢等等.在WPF中内置了如下 ...

  2. wpf中的触发器详解

    原文 http://zwkufo.blog.163.com/blog/static/25882512009724113250883/ 7.1.2 简单逻辑的表示--触发器(1) 在本章的多处介绍中都会 ...

  3. WPF: WPF 中的 Triggers 和 VisualStateManager

    在之前写的这篇文章 WPF: 只读依赖属性的介绍与实践 中,我们介绍了在 WPF 自定义控件中如何添加只读依赖属性,并且使其结合属性触发器 (Trigger) 来实现对控件样式的改变.事实上,关于触发 ...

  4. WPF中触发器Trigger、MultiTrigger、DataTrigger、MultiDataTrigger、EventTrigger几种

    WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改外观属性,或者执行动画等操作. WPFtrigger的主要类型有:Trigger. ...

  5. WPF中反转3D列表项

    原文:WPF中反转3D列表项 WPF中反转3D列表项                                                         周银辉记得在苹果电脑中有一个很酷的 ...

  6. (转载)WPF中的动画——(一)基本概念

    http://www.cnblogs.com/TianFang/p/4050845.html WPF的一个特点就是支持动画,我们可以非常容易的实现漂亮大方的界面.首先,我们来复习一下动画的基本概念.计 ...

  7. WPF中的动画

    动画无疑是WPF中最吸引人的特色之一,其可以像Flash一样平滑地播放并与程序逻辑进行很好的交互.这里我们讨论一下故事板. 在WPF中我们采用Storyboard(故事板)的方式来编写动画,为了对St ...

  8. WPF中的动画——(一)基本概念

    WPF的一个特点就是支持动画,我们可以非常容易的实现漂亮大方的界面.首先,我们来复习一下动画的基本概念.计算机中的动画一般是定格动画,也称之为逐帧动画,它通过每帧不同的图像连续播放,从而欺骗眼和脑产生 ...

  9. wpf中的触发器详解 (转自 乂乂的日志 - 网易博客)

    2010-03-24 16:19:07|  分类: WPF相关 |  标签: |字号大中小 订阅     wpf中的触发器详解 WPF/C# 2009-08-24 11:32:50 7.1.2  简单 ...

随机推荐

  1. 安全测试 一次关于WEB的URL安全测试

    一次关于WEB的URL安全测试 by:授客 QQ:1033553122     测试思路: 时间精力问题,对web安全这块也没咋深入研究,但因为某个小插曲,公司要求先做个简单的安全测试,主要是针对UR ...

  2. Chrome Inspect调试stetho出现空白的解决方法

    stetho可以使用chrome调试webview,有网友反映国内不行,亲测了一下是有解决方法的: Chrome://inspect 打开后会发现stetho的页面: 点击inspect,如果没有Fa ...

  3. LazyMan深入解析和实现

    一.题目介绍  以下是我copy自网上的面试题原文: 实现一个LazyMan,可以按照以下方式调用: LazyMan("Hank")输出: Hi! This is Hank!   ...

  4. 洗礼灵魂,修炼python(44)--巩固篇—反射之重新认识hasattr,gettattr,setattr,delattr

    不急着进入正题.先动手完成一个小程序: 设计一套简单的服务开启关闭程序,每次开启或关闭都得打印服务当前的状态: class Server(object): def __init__(self): se ...

  5. python装饰器的实现

    说起装饰器我们可能已经很熟悉了(不了解的可以查看python基础学习——装饰器),随手就可以写一个简单的装饰器 def decorator(func): def inner(*args, **kwar ...

  6. ES6 入门

    1.简介 ECMAScript 6.0 是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了.它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序, ...

  7. PLSQL操作Oracle创建用户和表

    1.打开PLSQL,填写用户名和密码(初始有两个用户sys和system,密码是自己安装oracle数据库时定的),Database选择ORCL(默认数据库,oracle中创建的用户就像是mysql中 ...

  8. 4.91Python数据类型之(6)元组

    前言 有时候,我们为了数值的安全性,不许用户修改数据,今天我们就来讲讲关于python不可变的数据类型--- 元组数据 目录 1.元组的基本定义 2.元组的基本操作 (一)元组的基本定义 1.元组的概 ...

  9. 利用java webservice调用天气预报实践

    最近要和其他业务系统进行数据交换,选择了webservice方案,于是查了一下网上的用法.首先是做一个天气的查询例子,看着挺简单,可实际动手做起来发现坑很多,费了半天劲终于调通了,于是记录下来. 1, ...

  10. myeclipse中配置spring xml自己主动提示

    版权声明: https://blog.csdn.net/zdp072/article/details/24582173 这是一篇分享技巧的文章:myeclipse中配置spring xml自己主动提示 ...