private void Transition(Storyboard aStoryboard, Storyboard bStoryboard) { if (m_AnimationElement == null || bStoryboard == null) return; bStoryboard.Stop(); // Give the target a unique name so we can find it later string name = Guid.NewGuid().ToString(); bStoryboard.SetTargetName(name); m_AnimationElement.Tag = name; bStoryboard.SetTarget(m_AnimationElement); foreach (Timeline animation in bStoryboard.Children) animation.SetTarget(m_AnimationElement); //m_AnimationElement.Visibility = Visibility.Visible; m_AnimationElement.UpdateLayout(); if (aStoryboard != null) { aStoryboard.Pause(); Duration duration = bStoryboard.Duration; TimeSpan timeSpan = aStoryboard.GetCurrentTime(); bStoryboard.Begin(); if (timeSpan.TotalMilliseconds != 0 && duration.HasTimeSpan) bStoryboard.Seek(duration.TimeSpan - timeSpan); } else bStoryboard.Begin(); }
public void Pause () { Canvas c = new Canvas (); Rectangle r = new Rectangle (); c.Children.Add (r); Storyboard sb = new Storyboard { Duration = new Duration (TimeSpan.FromSeconds (10000)) }; DoubleAnimation anim = new DoubleAnimation { From = 10, To = 50 }; sb.Children.Add (anim); Storyboard.SetTarget (anim, r); Storyboard.SetTargetProperty (anim, new PropertyPath ("Width")); Enqueue (() => sb.Begin ()); double width = 0; TimeSpan time = new TimeSpan(0); Enqueue (() => { Assert.IsLess (10000, sb.GetCurrentTime().TotalMilliseconds, "0"); sb.Pause (); time = sb.GetCurrentTime (); width = r.Width; }); Enqueue (() => { Assert.AreEqual (time, sb.GetCurrentTime(), "1"); Assert.AreEqual (width, r.Width, "2"); sb.Resume (); }); Enqueue (() => { Assert.IsGreater (time.TotalMilliseconds, sb.GetCurrentTime().TotalMilliseconds, "3"); Assert.IsGreater (width, r.Width, "4"); }); Enqueue (() => { TestPanel.Children.Clear (); TestPanel.Resources.Clear (); }); EnqueueTestComplete (); }