WPF中的DoubleAnimation

本文介绍如何使用WPF中的DoubleAnimation创建按钮大小变化的动画效果。通过设置起点、终点及持续时间等参数,演示了动画结束时保持变化或恢复原状的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                                                        WPF中的DoubleAnimation
                                                                                                                    周银辉

DoubleAnimation指定一个Double类型的属性,使其在指定的时间内由起点值到达终点值,从而形成动画效果.
应用它来实现动画效果,只要简单地指定几个参数值就可以了.
看下面的代码是改变一个按钮的大小的动画
None.gif //指定长度变化的起点,终点与持续时间
None.gif
            DoubleAnimation widthAnimation = 
None.gif                
new DoubleAnimation(200400new Duration(TimeSpan.FromSeconds(0.8)));
None.gif
None.gif            
//指定高度变化的起点,终点与持续时间
None.gif
            DoubleAnimation heightAnimation = 
None.gif                
new DoubleAnimation(50100new Duration(TimeSpan.FromSeconds(0.8)));
None.gif
None.gif            
//开始动画
None.gif            
//变化不是阻塞的,而是异步,所以看上去长度与高度几乎是同时变化
None.gif
            btn.BeginAnimation(Button.WidthProperty, widthAnimation);
None.gif            btn.BeginAnimation(Button.HeightProperty, heightAnimation);
这样我们就可以得到一个简单的动画,它在0.8秒内将按钮的长度由200变化到400,高度由50变化到100.

但我们会发现当动画结束后,按钮的大小保持在(400,100), 如果我们需要动画结束后将按钮大小恢复到原大小,那么我们应该指定另外一个参数:
FillBehavior
None.gif//指定长度变化的起点,终点与持续时间,并在动画结束时恢复原值
None.gif
            DoubleAnimation widthAnimation = 
None.gif                
new DoubleAnimation(200400new Duration(TimeSpan.FromSeconds(0.8)), FillBehavior.Stop);
None.gif
None.gif            
//指定高度变化的起点,终点与持续时间,并在动画结束时恢复原值
None.gif
            DoubleAnimation heightAnimation = 
None.gif                
new DoubleAnimation(50100new Duration(TimeSpan.FromSeconds(0.8)), FillBehavior.Stop);

 以下是完整的实例代码:
None.gifusing System;
None.gif
using System.Collections.Generic;
None.gif
using System.Text;
None.gif
using System.Windows;
None.gif
using System.Windows.Controls;
None.gif
using System.Windows.Data;
None.gif
using System.Windows.Documents;
None.gif
using System.Windows.Input;
None.gif
using System.Windows.Media;
None.gif
using System.Windows.Media.Imaging;
None.gif
using System.Windows.Shapes;
None.gif
using System.Windows.Media.Animation;
None.gif
None.gif
None.gif
namespace DoubleAnimationTest
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif    
/**//// <summary>
InBlock.gif    
/// Interaction logic for Window1.xaml
ExpandedSubBlockEnd.gif    
/// </summary>

InBlock.gif    public partial class Window1 : System.Windows.Window
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif       
InBlock.gif        
private Grid gridRoot;
InBlock.gif        
private Button buttonTest;
InBlock.gif
InBlock.gif        
public Window1()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            IniComponent();
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
private void IniComponent()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
this.gridRoot = new Grid();
InBlock.gif
InBlock.gif            
this.buttonTest = new Button();
InBlock.gif            
this.buttonTest.Content = "this is a test button";
InBlock.gif            
this.buttonTest.Width = 200;
InBlock.gif            
this.buttonTest.Height = 50;
InBlock.gif            
this.buttonTest.Click += new RoutedEventHandler(buttonTest_Click);
InBlock.gif            
this.gridRoot.Children.Add(this.buttonTest);
InBlock.gif
InBlock.gif            
this.Content = gridRoot;
InBlock.gif
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
void buttonTest_Click(object sender, RoutedEventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            Button btn 
= sender as Button;
InBlock.gif
InBlock.gif            
//指定长度变化的起点,终点与持续时间,并在动画结束时保持大小
InBlock.gif
            DoubleAnimation widthAnimation = 
InBlock.gif                
new DoubleAnimation(200400new Duration(TimeSpan.FromSeconds(0.8)), FillBehavior.HoldEnd);
InBlock.gif
InBlock.gif            
//指定高度变化的起点,终点与持续时间,并在动画结束时保持大小
InBlock.gif
            DoubleAnimation heightAnimation = 
InBlock.gif                
new DoubleAnimation(50100new Duration(TimeSpan.FromSeconds(0.8)), FillBehavior.HoldEnd);
InBlock.gif
InBlock.gif            
//开始动画
InBlock.gif            
//变化不是阻塞的,而是异步,所以看上去长度与高度几乎是同时变化
InBlock.gif
            btn.BeginAnimation(Button.WidthProperty, widthAnimation);
InBlock.gif            btn.BeginAnimation(Button.HeightProperty, heightAnimation);
InBlock.gif
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif
InBlock.gif    
public class MainClass
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        [STAThread]
InBlock.gif        
public static void Main()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            Window1 win 
= new Window1();
InBlock.gif            Application app 
= new Application();
InBlock.gif            
InBlock.gif            app.Run(win);
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值