public Task StopAsync() { TaskCompletionSource<object> tcs = new TaskCompletionSource<object>(); if (_Running != true) { tcs.SetResult(null); return tcs.Task; } Storyboard SB = new Storyboard(); _Running = false; double cangle = RotateTransform.Angle; int Nb = (int)Math.Round((360 - cangle) / 45) + 1; DoubleAnimationUsingKeyFrames dauk = new DoubleAnimationUsingKeyFrames(); for (int i = 0; i < 17; i++) { DiscreteDoubleKeyFrame first = new DiscreteDoubleKeyFrame(cangle + 45 * i, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(i * Frequency))); dauk.KeyFrames.Add(first); } Storyboard.SetTarget(dauk, VB); Storyboard.SetTargetProperty(dauk, new PropertyPath("(RenderTransform).(RotateTransform.Angle)")); SB.Children.Add(dauk); for (int i = 0; i < 8; i++) { ObjectAnimationUsingKeyFrames oauk = new ObjectAnimationUsingKeyFrames(); oauk.RepeatBehavior = new RepeatBehavior(1); DiscreteObjectKeyFrame first = new DiscreteObjectKeyFrame(Visibility.Visible, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(Frequency * Nb))); oauk.KeyFrames.Add(first); DiscreteObjectKeyFrame first_1 = new DiscreteObjectKeyFrame(Visibility.Collapsed, KeyTime.FromTimeSpan(TimeSpan.FromSeconds((i + Nb) * Frequency))); oauk.KeyFrames.Add(first_1); DiscreteObjectKeyFrame second = new DiscreteObjectKeyFrame(Visibility.Collapsed, KeyTime.FromTimeSpan(TimeSpan.FromSeconds((i + Nb) * Frequency))); oauk.KeyFrames.Add(second); Storyboard.SetTarget(oauk, this.FindName(string.Format("E{0}", i)) as DependencyObject); Storyboard.SetTargetProperty(oauk, new PropertyPath("Visibility")); SB.Children.Add(oauk); } _SB.Stop(); EventHandler handler = null; handler = delegate { SB.Completed -= handler; tcs.SetResult(null); }; SB.Completed += handler; SB.Begin(); return tcs.Task; }
private DoubleAnimationUsingKeyFrames GetAnimation() { NameScope.SetNameScope(this, new NameScope()); var animation = new DoubleAnimationUsingKeyFrames(); for (int i = 0; i < NumberOfFrames; i++) { var angle = i * 360.0 / NumberOfFrames; var time = KeyTime.FromPercent(((double)i) / NumberOfFrames); DoubleKeyFrame frame = new DiscreteDoubleKeyFrame(angle, time); animation.KeyFrames.Add(frame); } animation.Duration = TimeSpan.FromSeconds(1 / RevolutionsPerSecond); animation.RepeatBehavior = RepeatBehavior.Forever; Storyboard.SetTargetName(animation, ANIMATION); Storyboard.SetTargetProperty(animation, new PropertyPath(RotateTransform.AngleProperty)); return animation; }
public void NullableKeyTime () { var kf = new DiscreteDoubleKeyFrame (); kf.SetValue (DoubleKeyFrame.KeyTimeProperty, null); Assert.AreEqual (new KeyTime (), kf.ReadLocalValue (DoubleKeyFrame.KeyTimeProperty), "#0"); Assert.Throws<ArgumentException>(() => kf.SetValue (DoubleKeyFrame.ValueProperty, null), "#1"); Assert.AreEqual (new KeyTime (), kf.KeyTime, "#2"); }
/// <summary> /// アニメーションを更新します。 /// </summary> private void UpdateAnimation() { _storyboard.Stop(); if (this.Ellipse1 == null) return; if (double.IsNaN(this.ActualWidth)) return; _initialKeyFrame = new DiscreteDoubleKeyFrame(-this.Ellipse1.ActualWidth, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(0))); var splineDoubleKeyFrame = new SplineDoubleKeyFrame(this.ActualWidth, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(3000)), new KeySpline(0.3, 0.85, 0.7, 0.15)); _animation0_1.KeyFrames.Clear(); _animation0_2.KeyFrames.Clear(); _animation0_3.KeyFrames.Clear(); _animation0_4.KeyFrames.Clear(); _animation0_5.KeyFrames.Clear(); _animation0_1.KeyFrames.Add(_initialKeyFrame); _animation0_2.KeyFrames.Add(_initialKeyFrame); _animation0_3.KeyFrames.Add(_initialKeyFrame); _animation0_4.KeyFrames.Add(_initialKeyFrame); _animation0_5.KeyFrames.Add(_initialKeyFrame); _animation1.KeyFrames.Clear(); _animation2.KeyFrames.Clear(); _animation3.KeyFrames.Clear(); _animation4.KeyFrames.Clear(); _animation5.KeyFrames.Clear(); _animation1.KeyFrames.Add(splineDoubleKeyFrame); _animation2.KeyFrames.Add(splineDoubleKeyFrame); _animation3.KeyFrames.Add(splineDoubleKeyFrame); _animation4.KeyFrames.Add(splineDoubleKeyFrame); _animation5.KeyFrames.Add(splineDoubleKeyFrame); _storyboard.Begin(); }
private void Root_Loaded(object sender, RoutedEventArgs e) { _SB = new Storyboard(); DoubleAnimationUsingKeyFrames dauk = new DoubleAnimationUsingKeyFrames(); dauk.RepeatBehavior = RepeatBehavior.Forever; for (int i = 0; i < 9; i++) { DiscreteDoubleKeyFrame first = new DiscreteDoubleKeyFrame(45 * i, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(i * Frequency))); dauk.KeyFrames.Add(first); } Storyboard.SetTarget(dauk, VB); Storyboard.SetTargetProperty(dauk, new PropertyPath("(RenderTransform).(RotateTransform.Angle)")); _SB.Children.Add(dauk); for (int i = 1; i < 8; i++) { ObjectAnimationUsingKeyFrames oauk = new ObjectAnimationUsingKeyFrames(); oauk.RepeatBehavior = new RepeatBehavior(1); DiscreteObjectKeyFrame first = new DiscreteObjectKeyFrame(Visibility.Collapsed, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0))); oauk.KeyFrames.Add(first); DiscreteObjectKeyFrame first_1 = new DiscreteObjectKeyFrame(Visibility.Collapsed, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(i * Frequency))); oauk.KeyFrames.Add(first_1); DiscreteObjectKeyFrame second = new DiscreteObjectKeyFrame(Visibility.Visible, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(i * Frequency))); oauk.KeyFrames.Add(second); Storyboard.SetTarget(oauk, this.FindName(string.Format("E{0}", i)) as DependencyObject); Storyboard.SetTargetProperty(oauk, new PropertyPath("Visibility")); _SB.Children.Add(oauk); } Start(); }
private static DoubleKeyFrame CreateDoubleKeyFrmas(KeyFrames<double> Model) { DoubleKeyFrame frame = null; switch (Model.Type) { case KeyFramesType.Spline: frame = new SplineDoubleKeyFrame() { KeySpline = Model.Spline }; break; case KeyFramesType.Linear: frame = new LinearDoubleKeyFrame(); break; case KeyFramesType.Easing: frame = new EasingDoubleKeyFrame() { EasingFunction = Model.EasingFunction }; break; case KeyFramesType.Discrete: frame = new DiscreteDoubleKeyFrame(); break; default: break; } frame.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(Model.KeyTime)); frame.Value = Model.Value; return frame; }
private static void Grid_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e) { var cp = GetCP(sender); if (cp == null) { return; } MenuItem mi = (sender as MenuItem); cp.Item1.Content = mi.Header; cp.Item1.Opacity = 0; Storyboard sb = new Storyboard(); double currentangle = normaliseangle((cp.Item3.RenderTransform as RotateTransform).Angle); double targetangle = -SimpleCirclePanel.GetDecalAngle(mi); targetangle = normaliseangle(targetangle - currentangle) + currentangle; double delta = targetangle - currentangle; if (delta > 180) { targetangle = targetangle - 360; } else if (delta < -180) { targetangle = targetangle + 360; } //Console.WriteLine(targetangle); DoubleAnimation da0 = new DoubleAnimation(currentangle, targetangle, new Duration(TimeSpan.FromSeconds(0.3))); da0.AccelerationRatio = 0.2; da0.DecelerationRatio = 0.2; Storyboard.SetTarget(da0, cp.Item3); Storyboard.SetTargetProperty(da0, new PropertyPath("(Path.RenderTransform).(RotateTransform.Angle)")); sb.Children.Add(da0); DoubleAnimationUsingKeyFrames myAnimation = new DoubleAnimationUsingKeyFrames(); DiscreteDoubleKeyFrame opacityChange1 = new DiscreteDoubleKeyFrame(); opacityChange1.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0)); opacityChange1.Value = 0; myAnimation.KeyFrames.Add(opacityChange1); DiscreteDoubleKeyFrame opacityChange2 = new DiscreteDoubleKeyFrame(); opacityChange2.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.4)); opacityChange2.Value = 0; myAnimation.KeyFrames.Add(opacityChange2); LinearDoubleKeyFrame opacityChange3 = new LinearDoubleKeyFrame(); opacityChange3.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.9)); opacityChange3.Value = 1; myAnimation.KeyFrames.Add(opacityChange3); Storyboard.SetTarget(myAnimation, cp.Item1); Storyboard.SetTargetProperty(myAnimation, new PropertyPath("Opacity")); sb.Children.Add(myAnimation); sb.Begin(); }
private Timeline GetAnimation() { NameScope.SetNameScope( this, new NameScope() ); Timeline animation = null; if ( UseKeyFrames ) { animation = new DoubleAnimationUsingKeyFrames() { RepeatBehavior = RepeatBehavior.Forever }; for ( int i = 0; i < NumberOfFrames; i++ ) { var angle = i * 360.0 / (double)NumberOfFrames; var time = KeyTime.FromPercent( ( Convert.ToDouble( i ) ) / NumberOfFrames ); DoubleKeyFrame frame = new DiscreteDoubleKeyFrame( angle, time ); ( (DoubleAnimationUsingKeyFrames)animation ).KeyFrames.Add( frame ); } } else { animation = new DoubleAnimation( 0.0D, 360.0D, TimeSpan.FromSeconds( 1 / RevolutionsPerSecond ) ) { RepeatBehavior = RepeatBehavior.Forever }; if ( NumberOfFrames != 16 ) { Storyboard.SetDesiredFrameRate( animation, NumberOfFrames ); } } Storyboard.SetTargetName( animation, string.Format( "{0}{1}", m_AnimationName, ContentSpinner.ANIMATION ) ); Storyboard.SetTargetProperty( animation, new PropertyPath( RotateTransform.AngleProperty ) ); return animation; }