如何从ExpressionAnimation控制变量值?

问题描述

我在Microsoft.UI.Xaml.Controls命名空间中使用AnimatedVisualPlayer。我希望正在播放的动画的进度可以加倍显示,以便更新进度滑块的值。

AnimatedVisualPlayer提供了一个ProgressObject,它是一个Composition Object,您应该通过ExpressionAnimation将其绑定到某些属性。而不是使用此对象来驱动另一个动画,我想将动画进度作为一个值提供。有没有简单的方法可以做到这一点?

这是我到目前为止尝试过的:

 internal void ProgressObjectTovalue(CompositionObject ProgressObject)
    {
        var c = Window.Current.Compositor;

        SpriteVisual targetVisual = c.CreateSpriteVisual();

        ExpressionAnimation exp = c.CreateExpressionAnimation($"comp.Progress");

        exp.SetReferenceParameter("comp",ProgressObject);

        targetVisual.StartAnimation("Offset.X",exp);


        double progressValue = targetVisual.Offset.X;

使用此方法,似乎targetVisuals偏移量未绑定到AnimatedVisualPlayer的进度。感谢您提供的任何帮助!

解决方法

我希望正在播放的动画的进度可以加倍显示,以便更新进度滑块的值。

AnimatedVisualPlayer TestUI project派生,我们使用以下方法获取进度值,在测试过程中,它始终返回0或1值。

var progressPropertySet = (CompositionPropertySet)Playback_Player.ProgressObject;
progressPropertySet.TryGetScalar("progress",out var value);
var progress = value.ToString();

对于这种情况,建议您使用计时器来检测动画时间,并使用它划分AnimatedVisualPlayer Duration属性以获取进度。