过渡
在 Avalonia 中,过渡效果的设计也受到了 CSS 动画的重大启发。它们会监听目标属性值的任何变化,并根据其参数对变化进行动画处理。可以通过 Transitions 属性在任何 Control 上定义它们:
<Window xmlns="https://github.com/avaloniaui">
<Window.Styles>
<Style Selector="Rectangle.red">
<Setter Property="Height" Value="100"/>
<Setter Property="Width" Value="100"/>
<Setter Property="Fill" Value="Red"/>
<Setter Property="Opacity" Value="0.5"/>
</Style>
<Style Selector="Rectangle.red:pointerover">
<Setter Property="Opacity" Value="1"/>
</Style>
</Window.Styles>
<Rectangle Classes="red">
<Rectangle.Transitions>
<Transitions>
<DoubleTransition Property="Opacity" Duration="0:0:0.2"/>
</Transitions>
</Rectangle.Transitions>
</Rectangle>
</Window>上面的示例将监听 Rectangle 的 Opacity 属性的变化,当值发生变化时,会平滑地将旧值转换为新值,耗时 2 秒钟。
过渡效果也可以在任何样式中使用,只需使用 Transitions 作为目标属性,并将它们封装在 Transitions 对象中,如下所示:
每个过渡效果都有一个 Property、Delay、Duration 和一个可选的 Easing 属性。
Property 指的是过渡效果的目标,用于监听和对目标属性的值进行动画处理。
Delay 指的是应用过渡效果之前等待的时间量。
Duration 指的是过渡效果播放的时间量。
缓动函数与关键帧动画中描述的一样。
可用的过渡效果类型如下。必须根据正在动画的属性的类型使用正确的类型。
BoxShadowsTransition:用于BoxShadows目标属性BrushTransition:用于IBrush目标属性ColorTransition:用于Color目标属性CornerRadiusTransition:用于CornerRadius目标属性DoubleTransitions:用于double目标属性FloatTransitions:用于float目标属性IntegerTransitions:用于int目标属性PointTransition:用于Point目标属性SizeTransition:用于Size目标属性ThicknessTransition:用于Thickness目标属性TransformOperationsTransition:用于ITransform目标属性VectorTransition:用于Vector目标属性
可以对使用类似CSS语法应用的渲染变换进行过渡动画。下面的示例展示了一个Border,当鼠标指针悬停在它上面时,它会旋转45度:
可用的过渡动画类型为:
translate
translate(10px),translate(0px, 10px)
px
translateX
translateX(10px)
px
translateY
translateY(10px)
px
scale
scale(10),scale(0, 10)
scaleX
scaleX(10)
scaleY
scaleY(10)
skew
skew(90deg),skew(0, 90deg)
deg, grad, rad, turn
skewX
skewX(90deg)
deg, grad, rad, turn
skewY
skewY(90deg)
deg, grad, rad, turn
rotate
rotate(90deg)
deg, grad, rad, turn
matrix
matrix(1,2,3,4,5,6)
Last updated