Share via


ExpressionAnimation 类

定义

使用数学公式计算每帧动画属性的值的合成动画。

public ref class ExpressionAnimation sealed : CompositionAnimation
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.Foundation.LiftedContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class ExpressionAnimation final : CompositionAnimation
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.Foundation.WindowsAppSDKContract, 65536)]
class ExpressionAnimation final : CompositionAnimation
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.Foundation.LiftedContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class ExpressionAnimation : CompositionAnimation
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.Foundation.WindowsAppSDKContract), 65536)]
public sealed class ExpressionAnimation : CompositionAnimation
Public NotInheritable Class ExpressionAnimation
Inherits CompositionAnimation
继承
Object Platform::Object IInspectable CompositionObject CompositionAnimation ExpressionAnimation
属性

示例

void AnimateOpacity()
{
  // The Expression below will animate the opacity of the target Visual based on its position to the edge of the window.
  ExpressionAnimation exp = _compositor.CreateExpressionAnimation();
  float xWinSize = (float) Window.Current.Bounds.Width;
  SpriteVisual targetVisual = _compositor.CreateSpriteVisual();

  // Define the Expression Equation and references
  exp.Expression = "this.Target.Offset.X / xWindowSize";
  exp.SetScalarParameter("xWindowSize", xWinSize);

  // Attach the animation to the target Opacity property
  targetVisual.StartAnimation("Opacity", exp);
}
// Creates an Expression that calculates the angle between two Visual's Offset vectors 
// And assigns it to the RotationAngle of a third Visual
void angleBetweenVectors()
{
  SpriteVisual visualA = _compositor.CreateSpriteVisual();
  SpriteVisual visualB = _compositor.CreateSpriteVisual();

  SpriteVisual lineVisual = _compositor.CreateSpriteVisual();
  lineVisual.Size = new Vector2(50.0f, 5.0f);

  var rotationAnimation = _compositor.CreateExpressionAnimation();
  rotationAnimation.SetReferenceParameter("A", visualA);
  rotationAnimation.SetReferenceParameter("B", visualB);

  rotationAnimation.Expression = "ACos( ( (A.Offset.X * B.Offset.X) + (A.Offset.Y*B.Offset.Y) + (A.Offset.Z * B.Offset.Z) ) / ( Length(A.Offset) * 	Length(B.Offset) ) )";
  lineVisual.StartAnimation("RotationAngle", rotationAnimation);
}

注解

ExpressionAnimations 的核心允许开发人员定义一个数学公式,该公式可用于计算每个帧的目标动画属性的值。 这与 KeyFrameAnimation 形成鲜明对比,后者使用内插器定义动画属性随时间的变化方式。 可以使用对 Composition 对象、数学函数和运算符以及输入的属性的引用来定义数学公式。 表达式动画为使粘性标头和视差等体验易于描述打开了大门。

有关使用 Composition ExpressionAnimation 的详细演练,检查动画概述文档

使用 CompositionObject.StartAnimationCompositionObject.StopAnimation 方法来启动和停止动画。

那么表达式动画为什么有用呢?

表达式动画的真正强大功能来自于它们能够使用对其他对象的属性的引用创建数学关系。 这意味着可以使用一个公式来引用其他 Composition 对象、局部变量甚至 Composition 属性集中的共享值的属性值。 当这些引用随时间推移而更改和更新时,表达式也会发生更改和更新。 这为传统关键帧动画开辟了更大的可能性,其中值必须是离散的和预定义的 - ExpressionAnimations 可以创建更动态的动画体验。

注意事项

  • ExpressionAnimation 具有无限的生存期 - 它们将继续运行,直到显式停止。

  • 数学公式将作为字符串输入到表达式中 - 这可以在构造 ExpressionAnimation 时完成,也可以通过更改 属性单独完成。 如果在构造过程中完成,则将设置 属性。 + ExpressionAnimation exp = _compositor。CreateExpressionAnimation () ;exp.表达式 = “this.Target.Offset.X / xWindowSize“;

    • ExpressionAnimation exp = _compositor。CreateExpressionAnimation (“this.Target.Offset.X / xWindowSize“)
  • 数学公式将用于计算每个帧的动画属性值, (这与使用内插器的 KeyFrameAnimation形成鲜明对比)

  • 请注意计划进行动画处理的属性的类型 - 公式必须解析为同一类型。 否则,在计算表达式时将引发错误。 如果公式解析为 nan (数字/0) ,系统将使用先前计算的值

制作具有表达式动画的动态动画 UI 的关键是创建一个公式,其中对属性或其他值的引用将随时间而变化。

附加到动画属性时,系统将使用此公式计算每个帧的 属性值。 这意味着,系统将重新评估所有引用,这将推动公式的更改。 例如,在上面的示例中,如果视觉对象 A 或 B 由于另一个动画或输入而移动,则线条视觉对象的旋转角度将因公式而相应更改。

构造数学公式时,需要记住许多不同的组件 (有关每个组件的详细演练,请参阅动画概述) :

  • 运算符、优先级和关联性 + 表达式字符串支持使用典型数学运算符 (+、-、/、、 等 ) 你希望在任何公式中使用的。

    • 计算表达式时,它将遵循 C# 语言规范中定义的运算符优先级和关联性。
  • 属性参数 + 定义表达式时,可以选择定义对合成视觉对象、属性集或其他 C# 对象上其他属性的类型引用。

    • 若要在表达式字符串中使用,请基于类型利用“SetParameter”函数,定义表达式字符串中使用的字符串及其映射值。 这些函数作为顶级 CompositionAnimation 类的一部分列出。
  • 帮助程序函数和构造函数 + 表达式还可以利用公式中不同对象类型的函数和构造函数列表。

    • 当系统计算公式时,还有一些构造函数方法将构造对象类型
    • 下面进一步列出了每个类型的函数列表
  • 关键字 + 表达式还可以利用在计算表达式字符串时以不同方式处理的大量关键字。 请考虑这些关键字,不能在属性引用中用作字符串键。

    • 下面进一步列出的可用关键字列表
  • 条件 + 表达式还可以使用 Ternary 运算符的条件语句 (条件?ifTrue_expression : ifFalse_expression)

    • 三元运算符可以嵌套为 true 或 false 语句的表达式。

表达式关键字

关键字说明
This.StartingValue提供对要设置动画的属性的初始起始值的引用。
This.CurrentValue提供对 属性的当前“已知”值的引用
This.FinalValue提供对动画 (的最终值的引用(如果定义) 注意:与隐式动画相关,对于显式,保留与 This.StartingValue 相同的功能
Pi提供对 PI 值的关键字引用。
True/False提供对“true”或“false”布尔值的引用
This.Target提供对动画绑定到的目标对象的引用。

每个类型的表达式函数

Scalar

函数和构造函数运算说明
Abs(Float value)返回表示浮点参数绝对值的 Float
Clamp(Float value, Float min, Float max)如果值小于最小值,则返回大于和小于 max 或 min 的浮点值;如果值大于 max,则返回 max
Max (Float value1, Float value2)返回 value1 和 value2 之间的较大浮点数。
Min (Float value1, Float value2)返回 value1 和 value2 之间的较小浮点数。
Lerp(Float value1, Float value2, Float progress)返回表示根据进度计算的两个 Scalar 值之间的线性内插计算的浮点数(注意:进度在 0.0 和 1.0 之间)
Slerp(Float value1, Float value2, Float progress)返回表示根据进度计算的两个 Float 值之间的球面内插的 Float(注意:进度在 0.0 和 1.0 之间)
Mod(Float value1, Float value2)返回 value1 和 value2 拆分后生成的 Float 剩余数
Ceil(Float value)返回舍入到下一个较大整数的 Float 参数
Floor(Float value)返回舍入到下一个较小整数的 Float 参数
Sqrt(Float value)返回 Float 参数的平方根
Square(Float value)返回 Float 参数的平方
Sin (Float value1) Asin (Float value2) 返回 Float 参数的 Sin 或 ArcSin
Cos (Float value1) ACos (Float value2) 返回 Float 参数的 Cos 或 ArcCos
Tan (Float value1) ATan (Float value2) 返回 Float 参数的 Tan 或 ArcTan
Round(Float value)返回舍入到最近整数的 Float 参数
Log10(Float value)返回 Float 参数的 Log(基数 10)结果
Ln(Float value)返回 Float 参数的自然对数结果
Pow(Float value, Float power)返回提升到特定幂的 Float 参数的结果
ToDegrees(Float radians)返回换算为度的 Float 参数
ToRadians(Float degrees)返回换算为弧度的 Float 参数

Vector2

函数和构造函数运算说明
Abs (Vector2 value)返回绝对值应用到每个组件的 Vector2
Clamp (Vector2 value1, Vector2 min, Vector2 max)返回包含各个组件的受限值的 Vector2
Max (Vector2 value1, Vector2 value2)返回在 value1 和 value2 的每个相应组件上执行 Max 的 Vector2
Min (Vector2 value1, Vector2 value2)返回在 value1 和 value2 的每个相应组件上执行 Min 的 Vector2
Scale(Vector2 value, Float factor)返回每个矢量乘以比例因子的组件的 Vector2。
Transform(Vector2 value, Matrix3x2 matrix)返回在 Vector2 和 Matrix3x2 之间进行线性转换(又称为矢量乘以矩阵)后生成的 Vector2。
Lerp (Vector2 value1、Vector2 value2、标量进度) 返回表示根据进度计算的两个 Vector2 值之间的线性内插计算的 Vector2(注意:进度在 0.0 和 1.0 之间)
Length(Vector2 value)返回表示 Vector2 长度/幅值的 Float 值
LengthSquared(Vector2)返回表示 Vector2 长度/幅值平方的 Float 值
Distance(Vector2 value1, Vector2 value2)返回表示两个 Vector2 值之间距离的 Float 值
DistanceSquared(Vector2 value1, Vector2 value2)返回表示两个 Vector2 值之间距离的平方的 Float 值
Normalize(Vector2 value)返回表示所有组件均已标准化的参数的单元矢量的 Vector2
Vector2(Float x, Float y)使用两个 Float 参数构造 Vector2

Vector3

函数和构造函数运算说明
Abs (Vector3 value)返回绝对值应用到每个组件的 Vector3
Clamp (Vector3 value1, Vector3 min, Vector3 max)返回包含各个组件的受限值的 Vector3
Max (Vector3 value1, Vector3 value2)返回在 value1 和 value2 的每个相应组件上执行 Max 的 Vector3
Min (Vector3 value1, Vector3 value2)返回在 value1 和 value2 的每个相应组件上执行 Min 的 Vector3
Scale(Vector3 value, Float factor)返回每个矢量乘以比例因子的组件的 Vector3。
Lerp(Vector3 value1, Vector3 value2, Float progress)返回表示根据进度计算的两个 Vector3 值之间的线性内插计算的 Vector3(注意:进度在 0.0 和 1.0 之间)
Length(Vector3 value)返回表示 Vector3 长度/幅值的 Float 值
LengthSquared(Vector3)返回表示 Vector3 长度/幅值平方的 Float 值
Distance(Vector3 value1, Vector3 value2)返回表示两个 Vector3 值之间距离的 Float 值
DistanceSquared(Vector3 value1, Vector3 value2)返回表示两个 Vector3 值之间距离的平方的 Float 值
Normalize(Vector3 value)返回表示所有组件均已标准化的参数的单元矢量的 Vector3
Vector3(Float x, Float y, Float z)使用三个 Float 参数构造 Vector3

Vector4

函数和构造函数运算说明
Abs (Vector4 value)返回绝对值应用到每个组件的 Vector3
Clamp (Vector4 value1, Vector4 min, Vector4 max)返回包含各个组件的受限值的 Vector4
Max (Vector4 value1 Vector4 value2)返回在 value1 和 value2 的每个相应组件上执行 Max 的 Vector4
Min (Vector4 value1 Vector4 value2)返回在 value1 和 value2 的每个相应组件上执行 Min 的 Vector4
Scale(Vector3 value, Float factor)返回每个矢量乘以比例因子的组件的 Vector3。
Transform(Vector4 value, Matrix4x4 matrix)返回在 Vector4 和 Matrix4x4 之间进行线性转换(又称为矢量乘以矩阵)后生成的 Vector4。
Lerp(Vector4 value1, Vector4 value2, Float progress)返回表示根据进度计算的两个 Vector4 值之间的线性内插计算的 Vector4(注意:进度在 0.0 和 1.0 之间)
Length(Vector4 value)返回表示 Vector4 长度/幅值的 Float 值
LengthSquared(Vector4)返回表示 Vector4 长度/幅值平方的 Float 值
Distance(Vector4 value1, Vector4 value2)返回表示两个 Vector4 值之间距离的 Float 值
DistanceSquared(Vector4 value1, Vector4 value2)返回表示两个 Vector4 值之间距离的平方的 Float 值
Normalize(Vector4 value)返回表示所有组件均已标准化的参数的单元矢量的 Vector4
Vector4(Float x, Float y, Float z, Float w)使用四个 Float 参数构造 Vector4

Matrix3x2

函数和构造函数运算说明
Scale(Matrix3x2 value, Float factor)返回每个矩阵乘以比例因子的组件的 Matrix3x2。
Inverse(Matrix 3x2 value)返回表示倒数矩阵的 Matrix3x2 对象
Matrix3x2 (Float M11、Float M12、Float M21、Float M22、

Float M31、Float M32)

使用 6 个 Float 参数构造 Matrix3x2
Matrix3x2.CreateFromScale(Vector2 scale)从表示 scale[scale 的 Vector2 构造 Matrix3x2。X,0.0

0.0, scale.Y

0.0, 0.0 ]

Matrix3x2.CreateFromTranslation(Vector2 translation)从表示 translation 的 Vector2 构造 Matrix3x2[1.0, 0.0,

0.0, 1.0,

翻译。X,翻译。Y]

Matrix3x2.CreateSkew(Float x, Float y, Vector2 centerpoint)从两个 Float 和 Vector2[1.0,Tan (y) 构造 Matrix3x2,

Tan(x), 1.0,

-centerpoint。Y * Tan (x) ,-centerpoint。X * Tan (y) ]

Matrix3x2.CreateRotation(Float radians)从以弧度为单位的旋转构造 Matrix3x2[Cos (弧度) ,Sin (弧度) ,

-Sin(radians), Cos(radians),

0.0, 0.0 ]

Matrix3x2.CreateTranslation(Vector2 translation) (与 Matrix3x2 的 CreateFromTranslation 完全相同,只是新一致性) 的命名不同
Matrix3x2.CreateScale(Vector2 scale) (与用于 Matrix3x2 的 CreateFromScale 完全相同,只是新一致性) 的命名不同

Matrix4x4

函数和构造函数运算说明
Scale(Matrix4x4 value, Float factor)返回每个矩阵乘以比例因子的组件的 Matrix 4x4。
Inverse(Matrix4x4)返回表示倒数矩阵的 Matrix4x4 对象
Matrix4x4 (Float M11、Float M12、Float M13、Float M14、Float M21、Float M22、Float M23、Float M24、

Float M31, Float M32, Float M33, Float M34,

Float M41, Float M42, Float M43, Float M44)

使用 16 个 Float 参数构造 Matrix4x4
Matrix4x4(Matrix3x2 matrix)使用 Matrix3x2[matrix.11, matrix.12, 0, 0, 0,

matrix.21, matrix.22, 0, 0,

0, 0, 1, 0,

matrix.31, matrix.32, 0, 1]

Matrix4x4.CreateFromScale(Vector3 scale)从表示 scale[scale 的 Vector3 构造 Matrix4x4。X、0.0、0.0、0.0、

0.0, scale.Y, 0.0, 0.0,

0.0, 0.0, scale.Z, 0.0,

0.0, 0.0, 0.0, 1.0]

Matrix4x4.CreateFromTranslation(Vector3 translation)从表示翻译[1.0, 0.0, 0.0, 0.0, 0.0, 0.0,

0.0, 1.0, 0.0, 0.0,

0.0, 0.0, 1.0, 0.0,

翻译。X,翻译。Y,翻译。Z,1.0]

Matrix4x4.CreateTranslation(Vector3 translation) (与 Matrix4x4 的 CreateFromTranslation 完全相同,只是新一致性) 的命名不同
Matrix4x4.CreateScale(Vector3 scale) (与用于 Matrix4x4 的 CreateFromScale 完全相同,只是新一致性) 的命名不同
Matrix4x4.CreateFromAxisAngle(Vector3 axis, Float angle)使用 Vector3 轴和表示角度的 Float 构造 Matrix4x4

四元

函数和构造函数运算说明
Slerp(Quaternion value1, Quaternion value2, Float progress)返回表示根据进度计算的两个 Quaternion 值之间的球面内插的 Quaternion(注意:进度在 0.0 和 1.0 之间)
Concatenate(Quaternion value1 Quaternion value2)返回表示两个 Quaternion 串联的 Quaternion(又称为表示两个单个旋转组合的 Quaternion)
Length(Quaternion value)返回表示 Quaternion 长度/幅值的 Float 值。
LengthSquared(Quaternion)返回表示 Quaternion 长度/幅值平方的 Float 值
Normalize(Quaternion value)返回组件已标准化的 Quaternion
Quaternion.CreateFromAxisAngle(Vector3 axis, Scalar angle)使用 Vector3 轴和表示角度的 Scalar 构造 Quaternion
Quaternion(Float x, Float y, Float z, Float w)使用四个 Float 值构造 Quaternion

Color

函数和构造函数运算说明
ColorLerp(Color colorTo, Color colorFrom, Float progress)返回表示根据给定进度计算的两个颜色对象之间的线性内插值的 Color 对象。 (注意:进度在 0.0 和 1.0 之间)
ColorLerpRGB(Color colorTo, Color colorFrom, Float progress)返回表示根据 RGB 颜色空间中的给定进度计算的两个对象之间的线性内插值的 Color 对象。
ColorLerpHSL(Color colorTo, Color colorFrom, Float progress)返回表示根据 HSL 颜色空间中的给定进度计算的两个对象之间的线性内插值的 Color 对象。
ColorRGB (Float a、Float r、Float g、Float b) 构造表示由 ARGB 组件定义的 Color 的对象。 (注意:ARGB 组件介于 0.0 和 255.0 之间,)
ColorHsl(Float h, Float s, Float l)构造表示由 HSL 组件定义的 Color 的对象(注意:色调在 0 到 2pi 之间定义)

属性

Comment

要与 CompositionObject 关联的字符串。

(继承自 CompositionObject)
Compositor

用于创建此 CompositionObject 的 Compositor

(继承自 CompositionObject)
DispatcherQueue

获取 CompositionObject 的 DispatcherQueue。

(继承自 CompositionObject)
Expression

指定如何计算每个帧的动画值的数学公式。 Expression 是 ExpressionAnimation 的核心,表示系统将用于计算每个帧动画属性的值的公式。 公式以字符串的形式在此属性上设置。 尽管表达式可以通过简单的数学公式(如“2+2”)定义,但真正的力量在于创建数学关系,其中输入值可以逐帧更改帧。

ImplicitAnimations

附加到此对象的隐式动画集合。

(继承自 CompositionObject)
InitialValueExpressions

获取动画的初始值。

(继承自 CompositionAnimation)
Properties

CompositionObject 关联的属性的集合。

(继承自 CompositionObject)
Target

动画的目标。

(继承自 CompositionAnimation)

方法

ClearAllParameters()

清除动画的所有参数。

(继承自 CompositionAnimation)
ClearParameter(String)

从动画中清除参数。

(继承自 CompositionAnimation)
Close()

关闭 CompositionObject 并释放系统资源。

(继承自 CompositionObject)
Dispose()

执行与释放或重置非托管资源关联的应用程序定义的任务。

(继承自 CompositionObject)
PopulatePropertyInfo(String, AnimationPropertyInfo)

定义可进行动画处理的属性。

(继承自 CompositionObject)
SetBooleanParameter(String, Boolean)

设置用于 ExpressionAnimation表达式关键帧的布尔值参数。

(继承自 CompositionAnimation)
SetColorParameter(String, Color)

设置用于 ExpressionAnimation表达式关键帧Color 值参数。

(继承自 CompositionAnimation)
SetExpressionReferenceParameter(String, IAnimationObject)

设置一个对象,该对象实现 IAnimationObject 作为 ExpressionAnimation 中的引用参数。

(继承自 CompositionAnimation)
SetMatrix3x2Parameter(String, Matrix3x2)

设置用于 ExpressionAnimation表达式关键帧Matrix3x2 值参数。

(继承自 CompositionAnimation)
SetMatrix4x4Parameter(String, Matrix4x4)

设置用于 ExpressionAnimation表达式关键帧Matrix4x4 值参数。

(继承自 CompositionAnimation)
SetQuaternionParameter(String, Quaternion)

设置要与 ExpressionAnimation表达式关键帧一起使用的四元数值。

(继承自 CompositionAnimation)
SetReferenceParameter(String, CompositionObject)

设置对 Composition 对象的引用,以便与 ExpressionAnimation表达式关键帧一起使用。

(继承自 CompositionAnimation)
SetScalarParameter(String, Single)

设置用于 ExpressionAnimation表达式关键帧的标量值参数。

(继承自 CompositionAnimation)
SetVector2Parameter(String, Vector2)

设置 Vector2 值参数,以便与 ExpressionAnimation表达式关键帧一起使用。

(继承自 CompositionAnimation)
SetVector3Parameter(String, Vector3)

设置用于 ExpressionAnimation表达式关键帧Vector3 值参数。

(继承自 CompositionAnimation)
SetVector4Parameter(String, Vector4)

设置用于 ExpressionAnimation表达式关键帧Vector4 值参数。

(继承自 CompositionAnimation)
StartAnimation(String, CompositionAnimation)

使用 对象的指定属性连接动画并启动动画。

(继承自 CompositionObject)
StartAnimation(String, CompositionAnimation, AnimationController)

使用 对象的指定属性连接动画并启动动画。

(继承自 CompositionObject)
StartAnimationGroup(ICompositionAnimationBase)

启动动画组。

CompositionObject 上的 StartAnimationGroup 方法可用于启动 CompositionAnimationGroup。 组中的所有动画将同时在 对象上启动。

(继承自 CompositionObject)
StopAnimation(String)

断开动画与指定属性的连接并停止动画。

(继承自 CompositionObject)
StopAnimationGroup(ICompositionAnimationBase)

停止动画组。

(继承自 CompositionObject)
TryGetAnimationController(String)

返回指定属性上运行的动画的 AnimationController。

(继承自 CompositionObject)

适用于

另请参阅