问题描述
我在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
属性以获取进度。