欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 【WPF编程宝典】第10讲:简单动画

【WPF编程宝典】第10讲:简单动画

2024/10/25 17:20:30 来源:https://blog.csdn.net/qq_29794385/article/details/139515541  浏览:    关键词:【WPF编程宝典】第10讲:简单动画

1.基本动画

  • 这些基本动画都应用与C#代码
  • 动画是WPF模型的核心部分,让动画动起来不需要使用计时器以及事件处理代码,可使用声明的方式创建动画。
  • WPF动画第一条规则,每个动画都依赖于一个依赖项属性。
  • WPF动画第二条规则,属性的动态化需要有支持相应数据类型的动画类。比如按钮的宽度是双精度类型,需要DoubleAnimation,按钮的Padding是Thickness结构,需要ThicknessAnimation类。
  • 枚举类型通常不能应用动画,引用类型通常不能应用动画。
  • 基于路径的动画,比使用插值或关键帧的动画更加专业。通常使用类型名+AnimationUsingPath形式进行命名。如DoubleAnimationUsingPath。
  • WPF提供三种方法:线性插值,关键帧,以及路径。
  • WPF提供了42个类提供动画支持。
BooleanAnimationUsingKeyFrames,ByteAnimationUsingKeyFrames,ColorAnimation
DecimalAnimation,DoubleAnimation,DoubleAnimationUsingPath
Int16AnimationUsingKeyFrames,Int32AnimationUsingKeyFrames,Int64AnimationUsingKeyFrames
MatrixAnimationUsingPath,PointAnimation,PointAnimationUsingPath
Point3DAnimationUsingKeyFrames,ByteAnimation,CharAnimationUsingKeyFrames
ColorAnimationUsingKeyFrames,DecimalAnimationUsingKeyFrames,DoubleAnimationUsingKeyFrames
Int16Animation,Int32Animation,Int64Animation
MatrixAnimationUsingKeyFrames,ObjectAnimationUsingKeyFrames,PointAnimationUsingKeyFrames
Point3DAnimation,QuarternionAnimation,QuarternionAnimationUsingKeyFrames
RectAnimation,RectAnimationUsingKeyFrames,Rotation3DAnimation
Rotation3DAnimationUsingKeyFrames,SingleAnimation,SingleAnimationUsingKeyFrames
SizeAnimationUsingKeyFrames,ThicknessAnimation,VectorAnimation
Vector3DAnimation,SizeAnimation,StringAnimationUsingKeyFrames
ThicknessAnimationUsingKeyFrames,VectorAnimationUsingKeyFrames,Vector3DAnimationUsingKeyFrames

        一个示例

private void btn1_Click(object sender, RoutedEventArgs e)
{DoubleAnimation widthAnimation = new DoubleAnimation();widthAnimation.From = 160;widthAnimation.To = this.Width - 60;widthAnimation.Duration = TimeSpan.FromSeconds(1);btn1.BeginAnimation(Button.WidthProperty, widthAnimation);
}

2.故事板

  • 故事板(Storyboard)是BeginAnimation()方法的Xaml等价物。通过故事板将动画指定到合适的元素和属性上。
  • 事件触发:Styles.Triggers,DataTemplate.Triggers,ControlTemplate.Triggers,FrameworkElement.Triggers。
  • 重叠动画:默认HandoffBehavior属性为SnapshotAndReplace,也就是快照并替换。可使用HandoffBehavior的另一个枚举值Compose实现第二个动画融合到第一个动画的时间线中。
  • 动画同步:也就是多个动画为一组,时间线相同。只需将多个动画写到一个<Storyboard>中,并指定相同的时间。
  • 可使用SpeedRatio对动画进行调速,使用BeginTime属性对动画开始时间进行偏移。
  • 控制播放:继承自ControllableStoryboardAction类的动作类可以控制播放的状态。
    • PauseStoryBoard:停止播放动画并且保持其当前位置
    • ResumeStoryboard:恢复播放暂停的动画
    • StopStoryboard:停止播放动画,并将动画时钟重新设置到开始位置
    • SeekStoryboard:跳到动画时间线中的特定位置。如果动画当前正在播放,就继续从新位置播放。如果动画当前是暂停的,就继续保持暂停
    • SetStoryboardSpeedRatio:改变整个故事板(而不仅是改变某个内部动画)的 SpeedRatio 属性值
    • SkipStoryboardToFill:将故事板移到时间线的终点。从技术角度看,这个时期就是所谓的填充区域(6llregion)。对于标准动画,FiBchavior属性设置为HoldEnd,动画继续保持最后的值
    • RemoveStoryboard:移除故事板,停止所有正在运行的动画并将属性返回为原来的、最后一次设置的数值。这和对适当的元素使用nul动画对象调用BeginAnimation()方法的效果相同
  • button缩放简单示例
<Style x:Key="ButtonStyle"><Style.Triggers><Trigger Property="Button.IsPressed" Value="True"><Trigger.EnterActions><BeginStoryboard><Storyboard><DoubleAnimation Storyboard.TargetProperty="Width" To="250" Duration="0:0:5"/></Storyboard></BeginStoryboard></Trigger.EnterActions></Trigger></Style.Triggers>
</Style>
  • 检索当前动画的时间可以使用GetCurrentTime()和GetCurrentProgress。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com