WPF 动画 学习笔记2

使用代码创建动画

WPF使用它所需要的步长以确保在当前配置的帧速率下得到平滑的动画,标准的帧速率60帧/秒,换句话说,每隔1/60秒WPF就会计算所有应用了动画的数值,并更新相应的属性。


实例化一个动画类

然后使用希望修改的元素BeginAnimation()方法  (所有WPF元素,从UIElement基类开始,都继承了BeginAnimation()方法,该方法是IAnimatable接口的一部分)其他实现了IAnimatable接口的类包括ContentElement(文档流内容的基类)和Visual3D(3D可视对象的基类)


比如增加一个按钮的宽度的动画,当单击按钮时候,WPF平滑的扩展按钮的两个侧边直到充满窗口,为了创建这中效果,使用一个动画修改按钮的Width属性,当单击按钮时,下面的代码创建并启动了这个动画

DoubleAnimation widthAnimation=new DoubleAnimation();

widthAnimation.Form=160;

widthAnimation.To=this.Width-30;

widthAnimation.Duration=TimeSpan,FromSeconds(5);

cmdGrow.BeginAnimation(Button.WidthProperty ,  widthAnimation);



任何使用线性插值的动画最少需要是三个细节:开始值(From),结束值(To)和整个动画执行的时间(Duration)


故事板

故事板是增强的时间线,可以使用它分组多个动画,并且它还具有控制动画播放的能力,暂停,停止以及改变播放的位置。

Storyboard类提供的最基本的功能是它能够使用TargetProperty和TargetName属性指向一个特定的属性和特定的元素,换句话说,故事板在动画和希望应用动画的属性之间架起了一座桥梁


TargetProperty和TargetName属性都是附加属性,这意味着可以直接将它们用于动画

<Storyboard>

        <DoubleAnimation

               Storyboard.TargetName="cmdGrow"    Storyboard.TargetProperty="Width"

               From="160"  To="300"   Duration="0:0:5"></DoubleAnimation>

</Storyboard>

定义故事板是创建动画的第一步,为了让故事板实际运行起来,还需要一个事件触发器



事件触发器

可以在如下4个位置定义事件触发器

在样式(Style.Triggers集合)

在数据模版中(DataTemplate.Triggers集合)

在控件模版中(ControlTemplate.Triggers集合)

直接在一个元素中定义事件触发器(FrameworkElement.Triggers集合)


当创建事件触发器时候,需要指定开始触发器的路由事件和由触发器执行的一个或多个动作,对于动画,最常用的动作是BeginStoryboard,该动作相当于调用BeginAnimation()方法


下面的示例是使用按钮的triggers集合为Click事件关联一个动画,当单击动画时候,该动画增长按钮

<Button Padding="10" Name="cmdGrow" Height="40" Width="160"  HorizontalAlignment="Center"  VerTicalAlignment="Center">

<Button.Triggers>

     <EventTrigger  RoutedEvent="Button.Click">

          <EventTrigger.Actions>

                <BeginStoryboard>

                     <Storyboard>

                           <DoubleAnimation Storyboard.TargetProperty="Width"  To="300"  Duration="0:0:5"></DoubleAnimation>

                    </Storyboard>

...

<Button.Triggers>

<Button.Content>Click and Make Me Grow

</Button.Content>

<Button>



Storyboard.TargetProperty属性指定了希望改变的属性,如果没有指定,故事板使用父元素,在此使用的是希望扩展的按钮,如果设置一个附加属性(如Canvas.Left或Canvas.Top)需要在括号中包装整个属性,如下所示

<DoubleAnimation storyboard.TargetProperty="(Canvas.Left)"..../>



使用样式关联触发器

FrameworkElement.Triggers集合有点奇怪,它支持事件触发器,其他触发器集合(Style.Triggers         DataTemplate.Triggers与ControlTemplate.Triggers)的功能更加强大,它们支持三种基本类型的WPF触发器“属性触发器,数据触发器以及事件触发器


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值