private DoubleAnimation InstantiateAnimationFromResolvedKeyFrameIndex(int index) { DoubleKeyFrame keyFrame = KeyFrames[_resolvedKeyFrames.GetNextKeyFrameIndex(index)]; DoubleAnimation db = new DoubleAnimation() { BeginTime = TimeSpan.Zero, To = keyFrame.Value, Duration = keyFrame.KeyTime.TimeSpan - (index > 0 ? KeyFrames[_resolvedKeyFrames.GetNextKeyFrameIndex(index - 1)].KeyTime.TimeSpan : TimeSpan.Zero), EasingFunction = keyFrame.INTERNAL_GetEasingFunction(), }; Storyboard.SetTargetName(db, _targetName); Storyboard.SetTargetProperty(db, _targetProperty); Storyboard.SetTarget(db, _parameters.Target); db.InitializeIteration(); db.Completed -= ApplyNextKeyFrame; db.Completed += ApplyNextKeyFrame; return(db); }