WPF中的暂停旋转动画

WPF中的暂停旋转动画,wpf,animation,Wpf,Animation,我可以控制旋转图像的动画 我想随时启动、暂停和恢复旋转动画 我所有的东西都在代码后面: public partial class Wheel32Control : UserControl { public Wheel32Control() { InitializeComponent(); img.RenderTransform = new RotateTransform(); img

我可以控制旋转图像的动画

我想随时启动、暂停和恢复旋转动画

我所有的东西都在代码后面:

public partial class Wheel32Control : UserControl
    {

        public Wheel32Control()
        {
            InitializeComponent();
            img.RenderTransform = new RotateTransform();
            img.RenderTransformOrigin = new Point(0.5, 0.5);

            _daRotate = new DoubleAnimation(0, 360, TimeSpan.FromSeconds(2))
            {
                RepeatBehavior = RepeatBehavior.Forever
            };
        }

        private DoubleAnimation _daRotate;

        private bool _rotate;
        public bool Rotate
        {
            get
            {
                return _rotate;
            }
            set
            {
                _rotate = value;

                if (_rotate)
                    RotateStart();
                else
                    RotateStop();
            }
        }

        private void RotateStart()
        {
            this.img.RenderTransform.BeginAnimation(RotateTransform.AngleProperty, _daRotate);
        }

        private void RotateStop()
        {
            this.img.RenderTransform.BeginAnimation(RotateTransform.AngleProperty, null);
        }
    }
我的XAML部分:

<Image Name="img" Source="/Plt;component/Resources/Images/Kolo_32_3.png"
           Stretch="None"/>
我的问题是:

当我停止动画-它跳到零点。我想让它停在我停下来的地方


我的代码将动画设置为null,因为我是WPF新手,这是我知道的唯一停止动画的方法。

您可以通过设置“从”和“到”来设置动画,而不是通过设置“从”和“到”来设置动画:

_daRotate = new DoubleAnimation
{
    By = 360,
    Duration = TimeSpan.FromSeconds(2),
    RepeatBehavior = RepeatBehavior.Forever
};
删除动画之前,请将RotateTransform的“角度”属性设置为当前动画值。这是通过调用属性getter(返回当前有效的属性值)并将返回的值分配给属性setter(设置本地属性值)来完成的

private void RotateStop()
{
    var rotateTransform = (RotateTransform)img.RenderTransform;
    rotateTransform.Angle = rotateTransform.Angle; // looks strange, but works.
    rotateTransform.BeginAnimation(RotateTransform.AngleProperty, null);
}
线路

rotateTransform.Angle = rotateTransform.Angle;
如果将其替换为Angle属性的CLR包装器中的代码,可能会更好理解:

rotateTransform.SetValue(RotateTransform.AngleProperty,
    rotateTransform.GetValue(RotateTransform.AngleProperty));

您可以按一定数量设置动画,而不是通过设置“从”和“到”来设置动画:

_daRotate = new DoubleAnimation
{
    By = 360,
    Duration = TimeSpan.FromSeconds(2),
    RepeatBehavior = RepeatBehavior.Forever
};
删除动画之前,请将RotateTransform的“角度”属性设置为当前动画值。这是通过调用属性getter(返回当前有效的属性值)并将返回的值分配给属性setter(设置本地属性值)来完成的

private void RotateStop()
{
    var rotateTransform = (RotateTransform)img.RenderTransform;
    rotateTransform.Angle = rotateTransform.Angle; // looks strange, but works.
    rotateTransform.BeginAnimation(RotateTransform.AngleProperty, null);
}
线路

rotateTransform.Angle = rotateTransform.Angle;
如果将其替换为Angle属性的CLR包装器中的代码,可能会更好理解:

rotateTransform.SetValue(RotateTransform.AngleProperty,
    rotateTransform.GetValue(RotateTransform.AngleProperty));

漂亮干净的解决方案。感谢为奇怪的部分添加解释!漂亮干净的解决方案。感谢为奇怪的部分添加解释!