我可以控制旋转图像的动画。
我想随时启动,暂停和恢复旋转动画。
我在代码背后有一切:
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的新手,这只是停止我知道的动画的方法。
答案 0 :(得分:3)
不是通过设置From
和To
设置动画,而是可以设置一定数量的动画:
_daRotate = new DoubleAnimation
{
By = 360,
Duration = TimeSpan.FromSeconds(2),
RepeatBehavior = RepeatBehavior.Forever
};
在删除动画之前,将RotateTransform的Angle
属性设置为当前的动画值。这是通过调用属性getter来完成的,它返回&#34;当前有效的属性值&#34;,并将返回的值赋给属性setter,它设置&#34; local属性值&#34;。
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));