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

2024-06-21 00:12
文章标签 简单 编程 动画 wpf 宝典

本文主要是介绍【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。

这篇关于【WPF编程宝典】第10讲:简单动画的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1079661

相关文章

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder