使用DoubleAnimation类更改旋转持续时间的滑块值

时间:2014-11-02 14:31:36

标签: c# wpf animation slider

我正在尝试使用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))值。

尝试使用滑块值绑定,但无法正确获取此内容。

1 个答案:

答案 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度)。