滑块值,使用DoubleAnimation类更改旋转的持续时间
本文关键字:旋转 持续时间 DoubleAnimation 使用 | 更新日期: 2023-09-27 18:28:43
我正在尝试使用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))
值。
尝试使用滑块值绑定,但无法正确获取。
仅仅更改Duration
是不够的。动画由内部AnimationClock
控制的速度。此时钟在您调用BeginAnimation()
后仅初始化一次。因此,您必须使用ApplyAnimationClock()
方法更新内部AnimationClock
。
还应注意,还应将From
属性设置为当前已设置动画的值,以便在更改滑块的值时,Angle
将平滑地设置动画(无需从0
重新启动):
//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
,而不必关心To
(它总是旋转360度)。