• WPF中的DoubleAnimation


                                                                            WPF中的DoubleAnimation
                                                                                                                        周银辉

    DoubleAnimation指定一个Double类型的属性,使其在指定的时间内由起点值到达终点值,从而形成动画效果.
    应用它来实现动画效果,只要简单地指定几个参数值就可以了.
    看下面的代码是改变一个按钮的大小的动画
     //指定长度变化的起点,终点与持续时间
                DoubleAnimation widthAnimation = 
                    
    new DoubleAnimation(200400new Duration(TimeSpan.FromSeconds(0.8)));

                
    //指定高度变化的起点,终点与持续时间
                DoubleAnimation heightAnimation = 
                    
    new DoubleAnimation(50100new 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(200400new Duration(TimeSpan.FromSeconds(0.8)), FillBehavior.Stop);

                
    //指定高度变化的起点,终点与持续时间,并在动画结束时恢复原值
                DoubleAnimation heightAnimation = 
                    
    new DoubleAnimation(50100new 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(200400new Duration(TimeSpan.FromSeconds(0.8)), FillBehavior.HoldEnd);

                
    //指定高度变化的起点,终点与持续时间,并在动画结束时保持大小
                DoubleAnimation heightAnimation = 
                    
    new DoubleAnimation(50100new 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);
            }

        }

    }
  • 相关阅读:
    Oracle基础(二)之排序(order by)、限定查询(where)
    Python文件操作
    Python基础二
    Python基础一
    Linux系统学习之 三:新手必须掌握的Linux命令3
    Linux系统学习之 二:新手必须掌握的Linux命令2
    Linux系统学习之 一:新手必须掌握的Linux命令1
    Centos7.5虚拟机无法ping通网关、外网IP地址
    记一次mybatis的坑
    关于正则的那些事儿
  • 原文地址:https://www.cnblogs.com/zhouyinhui/p/688696.html
Copyright © 2020-2023  润新知