我正在尝试使用WPF中的DoubleAnimation类进行基本动画。在按钮上单击矩形旋转。 cs代码是
DoubleAnimation da = new DoubleAnimation();
da.From = 0; // start from 0 to 360, full circle
da.To = 360;
da.Duration = new Duration(TimeSpan.FromSeconds(0.5));
da.RepeatBehavior = RepeatBehavior.Forever;
RotateTransform rt = new RotateTransform();
rectangle1.RenderTransform = rt;
rt.BeginAnimation(RotateTransform.AngleProperty, da);
我要做的是使用滑块值更新da.Duration = new Duration(TimeSpan.FromSeconds(0.5))
值。
尝试使用滑块值绑定,但无法正确获取此内容。
答案 0 :(得分:0)
更改Duration
是不够的。内部AnimationClock
控制动画的速度有多快。拨打BeginAnimation()
后,此时钟只会初始化一次。因此,您必须使用AnimationClock
方法更新内部ApplyAnimationClock()
。
另请注意,您还应将From
属性设置为当前的动画值,以便在更改滑块的值时,Angle
将平滑动画(无需从{重新启动} {1}}):
0
请注意,我认为滑块的值对应于 毫秒 的数量,因此Slider的//The ValueChanged handler for your Slider
private void slider_ValueChanged(object sender,
RoutedPropertyChangedEventArgs e){
da.Duration = new Duration(TimeSpan.FromMilliseconds(yourSlider.Value));
da.From = rt.Angle;
rt.ApplyAnimationClock(RotateTransform.AngleProperty, da.CreateClock());
}
值应足够大(大约几千)如果你不想让你的矩形超快速旋转。您声明的所有变量也应该能够在Maximum
处理程序中访问。
另一个重要的注意事项是,您应该使用ValueChanged
属性而不是By
,如下所示:
To
这样您就可以更新da.By = 360;
而无需关心From
(它总是旋转360度)。