Я столкнулся с такой же потребностью (также 3D, также вращение Model3DGroup) и сделал это следующим образом:
Когда анимация должна быть остановлена, я получаю текущее двойное значение анимированного свойства (и сохраняю его локально).
var temp = myAxisAngleRotation.Angle;
Затем я удаляю анимацию из свойства зависимостей, используя
myAxisAngleRotation.BeginAnimation(AxisAngleRotation3D.AngleProperty, null);
и установите для свойства анимированной зависимости сохраненное значение.
myAxisAngleRotation.Angle = temp;
Когда анимация должна возобновиться, я создаю новую анимацию, которая начинается с текущего значения.
DoubleAnimation anim = new DoubleAnimation();
anim.From = myAxisAngleRotation.Angle;
anim.To = end;
anim.Duration = new TimeSpan(0, 0, 0, 0, duration);
myAxisAngleRotation.BeginAnimation(AxisAngleRotation3D.AngleProperty, anim);
Готово!
Если вы хотите, чтобы ваша анимация работала с постоянной скоростью, вам нужно будет учитывать расстояние (Math.Abs(anim.To-anim.From)
) при расчете длительности.
Однажды у меня было это. Я понял, что это можно обобщить для всех линейных анимаций и обобщил в Поведение / AttachedProperty.