【问题标题】:slider value to change the duration of spin using DoubleAnimation class使用 DoubleAnimation 类更改旋转持续时间的滑块值
【发布时间】:2014-11-02 14:31:36
【问题描述】:

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

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

【问题讨论】:

    标签: c# wpf animation slider


    【解决方案1】:

    更改Duration 是不够的。动画的速度由内部AnimationClock 控制。在您调用BeginAnimation() 后,此时钟仅初始化一次。所以你必须使用ApplyAnimationClock()方法更新内部AnimationClock

    另外请注意,您还应该将From 属性设置为当前动画值,以便在更改 Slider 的值时,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());
    }
    

    请注意,我假设滑块的 Value 对应于 毫秒 的数量,因此 Slider 的 Maximum 值应该足够大(大约几千)如果你不希望你的 Rectangle 旋转得非常快。此外,您声明的所有变量都应该能够在 ValueChanged 处理程序中访问。

    更重要的一点是你应该在这里使用By 属性而不是To,像这样:

    da.By = 360;
    

    这样您就可以只更新From 而无需关心To(它总是旋转360 度)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多