/// <summary> /// /// </summary> public override void OnApplyTemplate() { if (IsTransitioning) { AbortTransition(); } if (CustomVisualStates != null && CustomVisualStates.Any()) { var presentationGroup = VisualStates.TryGetVisualStateGroup(this, PresentationGroup); if (presentationGroup != null) { foreach (var state in CustomVisualStates) { presentationGroup.States.Add(state); } } } base.OnApplyTemplate(); previousContentPresentationSite = GetTemplateChild(PreviousContentPresentationSitePartName) as ContentPresenter; currentContentPresentationSite = GetTemplateChild(CurrentContentPresentationSitePartName) as ContentPresenter; if (currentContentPresentationSite != null) { if (ContentTemplateSelector != null) { currentContentPresentationSite.ContentTemplate = ContentTemplateSelector.SelectTemplate(Content, this); } else { currentContentPresentationSite.ContentTemplate = ContentTemplate; } currentContentPresentationSite.Content = Content; } // hookup currenttransition Storyboard transition = GetStoryboard(Transition); CurrentTransition = transition; if (transition == null) { var invalidTransition = Transition; // revert to default Transition = DefaultTransitionState; throw new ArgumentException(string.Format("'{0}' Transition could not be found!", invalidTransition), "Transition"); } VisualStateManager.GoToState(this, NormalState, false); }
void StartTransition(object oldContent, object newContent) { // both presenters must be available, otherwise a transition is useless. if (currentContentPresentationSite != null && previousContentPresentationSite != null) { if (RestartTransitionOnContentChange) { CurrentTransition.Completed -= OnTransitionCompleted; } if (ContentTemplateSelector != null) { previousContentPresentationSite.ContentTemplate = ContentTemplateSelector.SelectTemplate(oldContent, this); currentContentPresentationSite.ContentTemplate = ContentTemplateSelector.SelectTemplate(newContent, this); } else { previousContentPresentationSite.ContentTemplate = ContentTemplate; currentContentPresentationSite.ContentTemplate = ContentTemplate; } currentContentPresentationSite.Content = newContent; previousContentPresentationSite.Content = oldContent; // and start a new transition if (!IsTransitioning || RestartTransitionOnContentChange) { if (RestartTransitionOnContentChange) { CurrentTransition.Completed += OnTransitionCompleted; } IsTransitioning = true; VisualStateManager.GoToState(this, NormalState, false); VisualStateManager.GoToState(this, GetTransitionName(Transition), true); } } }