private void ActivateFrame(int selectedIndex, int unselectedIndex) { if (!IsLoaded) { return; } TransitionerSlide oldSlide = null, newSlide = null; for (var index = 0; index < Items.Count; index++) { var slide = GetSlide(Items[index]); if (index == selectedIndex) { newSlide = slide; slide.SetCurrentValue(TransitionerSlide.StateProperty, TransitionerSlideState.Current); } else if (index == unselectedIndex) { oldSlide = slide; slide.SetCurrentValue(TransitionerSlide.StateProperty, TransitionerSlideState.Previous); } else { slide.SetCurrentValue(TransitionerSlide.StateProperty, TransitionerSlideState.None); } Panel.SetZIndex(slide, 0); } if (newSlide != null) { newSlide.Opacity = 1; } if (oldSlide != null && newSlide != null) { var wipe = selectedIndex > unselectedIndex ? oldSlide.ForwardWipe : oldSlide.BackwardWipe; if (wipe != null) { wipe.Wipe(oldSlide, newSlide, GetTransitionOrigin(newSlide), this); } else { DoStack(newSlide, oldSlide); oldSlide.Opacity = 0; } } else if (oldSlide != null || newSlide != null) { DoStack(oldSlide ?? newSlide); if (oldSlide != null) { oldSlide.Opacity = 0; } } _nextTransitionOrigin = null; }
private Point GetTransitionOrigin(TransitionerSlide slide) { if (_nextTransitionOrigin != null) { return(_nextTransitionOrigin.Value); } if (slide.ReadLocalValue(TransitionerSlide.TransitionOriginProperty) != DependencyProperty.UnsetValue) { return(slide.TransitionOrigin); } return(DefaultTransitionOrigin); }