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));
漂亮干净的解决方案。感谢为奇怪的部分添加解释!漂亮干净的解决方案。感谢为奇怪的部分添加解释!