/// <summary> /// 开始进行转换 /// </summary> private void BeginTransition() { TransitionSelector selector = TransitionSelector; Transition transition = selector != null ? selector.SelectTransition(CurrentContentPresenter.Content, Content) : Transition; if (transition != null) { // Swap content presenters AdornerDecorator temp = _previousHost; _previousHost = _currentHost; _currentHost = temp; } ContentPresenter currentContent = CurrentContentPresenter; // Set the current content currentContent.Content = Content; currentContent.ContentTemplate = ContentTemplate; currentContent.ContentTemplateSelector = ContentTemplateSelector; if (transition != null) { ContentPresenter previousContent = PreviousContentPresenter; if (transition.IsNewContentTopmost) Children.Add(_currentHost); else Children.Insert(0, _currentHost); IsTransitioning = true; _activeTransition = transition; CoerceValue(TransitionProperty); CoerceValue(ClipToBoundsProperty); //使用指定转换器进行转换 transition.BeginTransition(this, previousContent, currentContent); } }
public ListTransitionSelector(Transition forward, Transition backward, IList list) { _forward = forward; _backward = backward; _list = list; }
/// <summary> /// Clean up after the transition is complete /// </summary> /// <param name="transition"></param> internal void OnTransitionCompleted(Transition transition) { _children.Clear(); _children.Add(_currentHost); _currentHost.Visibility = Visibility.Visible; _previousHost.Visibility = Visibility.Visible; ((ContentPresenter)_previousHost.Child).Content = null; IsTransitioning = false; _activeTransition = null; CoerceValue(TransitionProperty); CoerceValue(ClipToBoundsProperty); CoerceValue(ContentProperty); }