开发工具与关键技术:Visual Studio 2017
撰写时间: 2019年7月17日
下面是一个TimeLine类的属性,首先来看TimeLine类的常用属性表:
名称 | 说明 |
---|---|
BeginTime | 设置将添加到动画开始之前的延时时间(TimeSpan类型),这一延时总被加载到总时间,具有5秒延时的5秒动画,总时间是10秒 |
Duration | 动画开始到结束的运行时间 |
SpeedRatio | 提高或减慢动画速度,SpeedRatio属性值是1,如果增加该属性值为5,动画的速度就会变成原来的5倍 |
AcclerationRatio DecelerationRatio | 使动画不是线性的,从而开始是较慢,或者开始时较快,这两个属性的值在0~1之间,这两个属性值之和不能超过1 |
AutoReverse | 如果为True,当动画完成时会自动反向播放,返回到原始值 |
FillBehavior | 决定当动画结束时,如何操作 |
RepeatBehavior | 通过该属性,可以使用指定的次数或时间间隔重复动画,用于设置这个属性的RepeatBehavior对象决定了确切的行为 |
可以通过AccelerationRatio和DecelerationRation属性压缩部分时间轴,使动画运行的更快,并将拉伸其他时间进行补偿,使总时间保持不变。这两个属性都表示百分比值,例如:将AcceleRation属性设置为0.3,表示希望使用动画持续时间中前30%的时间进行加速。例如在1个10秒的动画中,前3秒会加速运行,而剩余的7秒会以恒定不变的速度运行,如果将DeceleRation属性设置为0.3那么最后3秒回减速运行;见代码图: |
//实例化一个DoubleAnimation类
DoubleAnimation doubleAnimatione = new DoubleAnimation();
//设置From属性
doubleAnimatione.From = btn1.Width;
//前5秒加速运行
doubleAnimatione.AccelerationRatio = 0.5;
//后2秒减速运行
doubleAnimatione.DecelerationRatio = 0.2;
//设置To属性
doubleAnimatione.To = 1000;
//设置Duration属性
doubleAnimatione.Duration = new Duration(TimeSpan.FromSeconds(10));
//为元素设置BenginAnimation方法
btn1.BeginAnimation(Button.WidthProperty, doubleAnimatione);
使用RepeataBehavior属性可以控制如何重复运行动画,如果希望重复固定次数,应为RepeatBehavior构造函数传递合适的次数,还可设置RepeatBehavior为永久重要;见代码图:
//设置重复次数为3次
doubleAnimatione.RepeatBehavior = new RepeatBehavior(3);
//设置永久重复动画
doubleAnimatione.RepeatBehavior = RepeatBehavior.Forever;
WPF动画通过一组动画类表示,使用少数几个属性设置相关信息,如开始值、结束值以及持续时间,这显然使他们非常适合于XAML,不是很清晰的是,如何为特定的事件和属性关联动画,以及如何在正确的时间触发动画;故事板是BeginAnimation()方法的XAML等价物,通过故事板将动画指定到合适的元素和属性。事件触发器:事件触发器响应属性变化或事件(如按钮的Click事件),并控制故事板。增强的时间线,可用来分组多个动画,而且具有控制动画播放的能力一暂停、停止以及播放位置。然而StoryBoard类提供的最基本功能是,能够使用TargetProperty和TargetName属性指向某个特定属性和特定元素,换句话说,故事板在动画和希望应用动画的属性之间架起了一座桥梁。其中TargetProperty属性和TargetName属性都是附加:
<!--由于Storyboard.TargetProperty属性是附加属性,创建一个故事板-->
<Storyboard Storyboard.TargetProperty="width">
<!--创建一个DoubleAnimation类-->
<DoubleAnimation To="350" RepeatBehavior="Forever" Duration="0:0:3"></DoubleAnimation>
</Storyboard>
可以在4个位置定义事件触发器:
1).在样式中(style.Triggers集合)
2).在数据模板中(DataTemplate.Triggers集合)
3).在控件模板中(ControlTemplate.Triggers集合)
4).直接在元素中定义事件触发器(FrameworkElement.Triggers集合)
当创建事件触发器时,需要指定开始触发器的路由事件和触发器执行的一个或多个动作,对于动画,最常见的动作是BeginStoryBoard,该动作相当于调用BeginAnimation()方法;所有事件触发器都可以启动动作,所有动作都由继承自System.Windows.TriggerAction的类表示。见代码图:
<Button Width="200" Height="80" Content="事件触发器" FontSize="20">
<!--元素触发器-->
<Button.Triggers>
<!--定义事件触发器-->
<EventTrigger RoutedEvent="Button.Click">
<!--执行一个动作-->
<EventTrigger.Actions>
<!--开始故事板-->
<BeginStoryboard>
<!--创建一个故事板-->
<Storyboard>
<!--创建一个故事板-->
<Storyboard>
<!--创建一个DoubleAnimation类-->
<DoubleAnimation Storyboard.TargetProperty="width" To="350" RepeatBehavior="Forever" Duration="0:0:3"></DoubleAnimation>
</Storyboard>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Button.Triggers>
</Button>
效果图: