1. WPF中的动画(Animation),是一种属性动画。技术上来说,它是让属性从一个值,变化到另一个值的过程。因此,有两条重要的特性:

  1.1 只能为依赖属性应用动画(因为第二条特性)。
  1.2 动画只是临时更改属性的值,并不真正的改变属性值。这与依赖属性的工作方式有关。

2. WPF动画,分为三种:插值动画、关键帧动画、路径动画
  2.1 插值动画:
    1)定义:插值动画是指,属性值从某一个值,经过一段时间后,连续变化值另一个值的动画。
        例如宽度属性,类型为double,可以设定动画为在1s的时间内,值从0变到10。此时WPF内部会采用插值算法,填充1与10之间的值。
    2)命名规则:数据类型+Animation。例如double类型动画:DoubleAnimation

  2.2 关键帧动画:
    1)定义:对于属性类型为离散量类型的,因为无法进行插值运算。因此只能填充“帧”。
        例如Name属性,类型是string。当属性值从“raymond” 变到 “jack”的时候,是无法进行插值运算的。此时就只能用关键帧来代替。在某一个时候,显示“raymond”,然后在下一个时候,显示“jack”。
    2)命名规则:数据类型+AnimationUsingKeyFrames。例如double类型:DoubleAnimationUsingKeyFrames

  2.3 路径动画:
    1)路径动画,是指让某个元素用来沿着路径的方向进行变换的动画。
    2)命名规则:数据类型+AnimationUsingPath。例如double类型DoubleAnimationUsingPath

3. 动画与数据类型有关。因为针对不同的数据类型,有不同的“填充”方式。例如数值类型,可以采用插值算法调整起始值与中止值之间的间隔,而对于离散量,就得用“帧”来填充。

从下面的Animation类型的继承关系来看,每一种插值动画,都会有一个对应的关键帧动画,少数的几个还具有路径动画。

4. FillBehavior属性:该属性用来指示,当动画结束时,属性的值该如何变化。HoldEnd表示保持最终值,Stop表示属性恢复到原始的值。

5.Animation的使用方法

  以下代码创建一个简单的动画:鼠标点击的时候,btn(Button类型)的宽度由当前值变到到100。代码如下:

<!-- xaml代码 -->
<Button Name="btn" Content="Click Me" HorizontalAlignment="Left" VerticalAlignment="Top"
Click="btn_Click"/> // 后台代码
private void btn_Click(object sender, RoutedEventArgs e)
{
DoubleAnimation widthAnimation = new()
{
From = btn.ActualWidth,
To = 100,
Duration = new Duration(TimeSpan.FromMilliseconds(1000)) // 持续1s钟
};

// 开始动画:指定要应用动画的属性
btn.BeginAnimation(Button.WidthProperty,widthAnimation);
}

  这里需要说明几点:

  1)Animation不能直接在xaml中写。如果要在xaml中写Animation,则需要结合Storyboard。下一篇文章再介绍。

  2)要应用动画,需要调用元素的BeginAnimation()方法。需要注意,BeginAnimation()方法由IAnimatable接口定义(只要实现了该接口,都会有这个方法),但只有元素调用这个方法才能应用动画。如果是Animation类的实例调用该方法,没有意义,因为没有指定动画应用于哪个对象。

Animation类的继承关系:

Object
DispatcherObject
DependencyObject
Freezable
Animatable
Timeline
AnimationTimeline
BooleanAnimationBase            // bool类型的值的动画
BooleanAnimationUsingKeyFrames
ByteAnimationBase              // byte类型的值的动画
ByteAnimation
ByteAnimationUsingKeyFrames
CharAnimationBase              // char类型的值的动画
CharAnimationUsingKeyFrames
ColorAnimationBase              // Color类型的值的动画
ColorAnimation
ColorAnimationUsingKeyFrames
DecimalAnimationBase            // Decimal类型的值的动画
DecimalAnimation
DecimalAnimationUsingKeyFrames
DoubleAnimationBase             // double类型的值的动画
DoubleAnimation
DoubleAnimationUsingKeyFrames
DoubleAnimationUsingPath
Int16AnimationBase              // Int16类型的值的动画
Int16Animation
Int16AnimationUsingKeyFrames
Int32AnimationBase              // Int32类型的值的动画
Int32Animation
Int32AnimationUsingKeyFrames
Int64AnimationBase              // Int64类型的值的动画
Animation.Int64Animation
Int64AnimationUsingKeyFrames
MatrixAnimationBase              // Matrix类型的值的动画
MatrixAnimationUsingKeyFrames
MatrixAnimationUsingPath
ObjectAnimationBase               // Object类型的值的动画
ObjectAnimationUsingKeyFrames
Point3DAnimationBase              // Point3D类型的值的动画
Point3DAnimation
Point3DAnimationUsingKeyFrames
PointAnimationBase               // Point类型的值的动画
PointAnimation
PointAnimationUsingKeyFrames
PointAnimationUsingPath
QuaternionAnimationBase            // Quaternion(四元组)类型的值的动画
QuaternionAnimation
QuaternionAnimationUsingKeyFrames
RectAnimationBase                // Rect类型的值的动画
RectAnimation
RectAnimationUsingKeyFrames
Rotation3DAnimationBase            // Rotation3D类型的值的动画
Rotation3DAnimation
Rotation3DAnimationUsingKeyFrames
SingleAnimationBase               // Single类型的值的动画
SingleAnimation
SingleAnimationUsingKeyFrames
SizeAnimationBase                // Size类型的值的动画
SizeAnimation
SizeAnimationUsingKeyFrames
StringAnimationBase               // string类型的值的动画
StringAnimationUsingKeyFrames
ThicknessAnimationBase             // Thickness类型的值的动画
ThicknessAnimation
ThicknessAnimationUsingKeyFrames
Vector3DAnimationBase             // Vector3D类型的值的动画
Vector3DAnimation
Vector3DAnimationUsingKeyFrames
VectorAnimationBase              // Vector类型的值的动画
VectorAnimation
VectorAnimationUsingKeyFrames

WPF学习 - 动画基础(1)的更多相关文章

  1. Expression Blend学习动画基础

    原文:Expression Blend学习动画基础 什么是动画(Animation)? 动画就是时间+换面的组合,画面跟着时间变化.最常见的是flash的动画,还有GIF动态图片. 动画的主要元素 时 ...

  2. [WPF系列]从基础起步学习系列计划

    引言 WPF技术已经算不什么新技术,一搜一大把关于WPF基础甚至高级的内容.之前工作中一直使用winform所以一直没有深入学习WPF,这次因项目中使用了WPF技术来实现比较酷的展示界面.我在这里只是 ...

  3. WPF学习之绘图和动画

    如今的软件市场,竞争已经进入白热化阶段,功能强.运算快.界面友好.Bug少.价格低都已经成为了必备条件.这还不算完,随着计算机的多媒体功能越来越强,软件的界面是否色彩亮丽.是否能通过动画.3D等效果是 ...

  4. 《Programming WPF》翻译 第8章 1.动画基础

    原文:<Programming WPF>翻译 第8章 1.动画基础 动画包括在一段时间内改变用户界面的某些可见的特征,如它的大小.位置或颜色.你可以做到这一点,非常困难的通过创建一个tim ...

  5. WPF学习之绘图和动画--DarrenF

    Blend作为专门的设计工具让WPF如虎添翼,即能够帮助不了解编程的设计师快速上手,又能够帮助资深开发者快速建立图形或者动画的原型. 1.1   WPF绘图 与传统的.net开发使用GDI+进行绘图不 ...

  6. WPF学习(12)动画

    本篇来学习WPF的动画.什么是动画?动画就是一系列帧.在WPF中,动画就是在一段时间内修改依赖属性值的行为,它是基于时间线Timeline的.有人会说,要动画干嘛,华而不实,而且添加了额外的资源消耗而 ...

  7. WPF动画基础及实例

    1.介绍 在之前做winform中, 也做过一些动画效果, 但是整个动画都需要我们自己去编写, 利用计时器或线程去直接操作UI元素的属性, 然而在WPF中, 则是通过一种全新的基于属性的动画系统, 改 ...

  8. 【WPF学习】第五十三章 动画类型回顾

    创建动画面临的第一个挑战是为动画选择正确的属性.期望的结果(例如,在窗口中移动元素)与需要使用的属性(在这种情况下是Canvas.Left和Canvas.Top属性)之间的关系并不总是很直观.下面是一 ...

  9. 【WPF学习】第五十四章 关键帧动画

    到目前为止,看到的所有动画都使用线性插值从起点到终点.但如果需要创建具有多个分段的动画和不规则移动的动画.例如,可能希望创建一个动画,快速地将一个元素滑入到视图中,然后慢慢地将它移到正确位置.可通过创 ...

  10. 【WPF学习笔记】之如何把数据库里的值读取出来然后显示在页面上:动画系列之(六)(评论处有学习资料及源码)

    (应博友们的需要,在文章评论处有源码链接地址,以及WPF学习资料.工具等,希望对大家有所帮助) ...... 承接系列五 上一节讲了,已经把数据保存到数据库并且删除数据,本讲是把已经存在的数据从数据库 ...

随机推荐

  1. LeetCode刷题,代码随想录算法训练营Day3| 链表理论基础 203.移除链表元素 707.设计链表 206.反转链表

    链表理论基础 链表是通过指针串联在一起的线性结构,每个节点由一个数据域和一个指针域构成. 链表的类型 单链表 双链表 有两个指针域,一个指向下一个节点,一个指向上一个节点,既可以向前查询也可以向后查询 ...

  2. 如何卸载 python setup.py install 安装的包?

    当我们半自动安装某些 python 包时,总是存在很多依赖关系的问题,而这些问题还是很难避免的,所以,当我们安装一个不确定的包的时候,最好提前收集一些相关资料,或者请教他人,同时最好把安装过程都记录下 ...

  3. HStore表全了解:实时入库与高效查询利器

    摘要:本文章将从使用者角度介绍HStore概念以及使用. 本文分享自华为云社区<GaussDB(DWS)HStore表讲解>,作者:大威天龙:- . HStore表简介 面对实时入库和实时 ...

  4. 前端vue uni-app百度地图定位组件,显示地图定位,标记点,并显示详细地址

    快速实现前端百度地图定位组件,显示地图定位,标记点,并显示详细地址; 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12677 ...

  5. tSNE算法在自然语言处理中的应用:文本降维和可视化

    目录 技术原理及概念 t-SNE(Toeplitz-Stochastic Neural Network)是一种常用的文本降维和可视化算法,它的核心思想是将高维文本数据映射到低维空间,同时保持数据的一致 ...

  6. React后台管理系统 03全局样式scss

    安装scss样式依赖,使用命令 npm i --save-dev sass  --dev 会将依赖安装在devDependencies=>开发环境的依赖. 我们在src目录下的assets下创建 ...

  7. 什么是hive的高级分组聚合,它的用法和注意事项以及性能分析

    hive的高级分组聚合是指在聚合时使用GROUPING SETS.CUBE和ROLLUP的分组聚合. 高级分组聚合在很多数据库类SQL中都有出现,并非hive独有,这里只说明hive中的情况. 使用高 ...

  8. 即构SDK9月迭代:外部采集、音频频谱、房间附加消息等多个模块功能上新

    即构SDK9月迭代来了,本月SDK在外部采集.音频频谱.房间附加消息等多个功能模块均有新功能上线,并且还针对K歌音乐场景下,优化了变调功能效果.以下是详细的迭代内容: LiveRoom   新增 1. ...

  9. 再见RestTemplate,Spring 6.1新特性:RestClient 了解一下!

    在最近发布的Spring 6.1 M2版本中,推出了一个全新的同步HTTP客户端:RestClient.用一句话来让Spring开发者认识RestClient的话:像WebClient一样具备流畅AP ...

  10. Linux切换Root权限配置和无法切换排查

    1.wheel组 普通用户禁止su切换root 在默认的情况下,普通用户通过su可以切换到root用户下,为了加强系统安全性,使用Linux的特殊用户组wheel来实现,只有用户加入到wheel组当中 ...