/// <summary> /// IsTransitioningProperty property changed handler. /// </summary> /// <param name="d">TransitioningContentControl that changed its IsTransitioning.</param> /// <param name="e">Event arguments.</param> private static void OnIsTransitioningPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { AnimatingFrame source = (AnimatingFrame)d; if (!source._allowIsTransitioningWrite) { source.IsTransitioning = (bool)e.OldValue; throw new InvalidOperationException(); } }
/// <summary> /// TransitionProperty property changed handler. /// </summary> /// <param name="d">TransitioningContentControl that changed its Transition.</param> /// <param name="e">Event arguments.</param> private static void OnTransitionPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { AnimatingFrame source = (AnimatingFrame)d; string oldTransition = e.OldValue as string; string newTransition = e.NewValue as string; if (source.IsTransitioning) { source.AbortTransition(); } // find new transition Storyboard newStoryboard = source.GetStoryboard(newTransition); // unable to find the transition. if (newStoryboard == null) { // could be during initialization of xaml that presentationgroups was not yet defined if (TryGetVisualStateGroup(source, PresentationGroup) == null) { // will delay check source.CurrentTransition = null; } else { // revert to old value source.SetValue(TransitionProperty, oldTransition); throw new ArgumentException( string.Format("Transition not found {0}", newTransition)); } } else { source.CurrentTransition = newStoryboard; } }