void OnBladePageSelected(object sender, RoutedEventArgs e) { BladePage page = e.OriginalSource as BladePage; if (page != null) { this.SelectedIndex = this.ItemContainerGenerator.IndexFromContainer(page); } }
protected override Size ArrangeOverride(Size finalSize) { double runningTop = 0; double animationSpeed = 350; bool selectedBladeSeen = false; BladePage lastBladePage = null; if (finalSize.Height != lastLayoutHeight) { animationSpeed = 0; } foreach (var blade in this.InternalChildren.OfType <BladePage>()) { lastBladePage = blade; var rect = new Rect(0, 0, finalSize.Width, this.contentHeight + blade.DesiredHeaderHeight); blade.Arrange(rect); var xlat = blade.RenderTransform as TranslateTransform; if (xlat == null) { xlat = new TranslateTransform(); blade.RenderTransform = xlat; AnimateTransformTo(xlat, runningTop, 0); // First time we've seen it } else { AnimateTransformTo(xlat, runningTop, animationSpeed); } if (!selectedBladeSeen && blade.IsSelected) { selectedBladeSeen = true; runningTop += this.contentHeight + blade.DesiredHeaderHeight; } else { runningTop += blade.DesiredHeaderHeight; } } this.lastLayoutHeight = finalSize.Height; if (!selectedBladeSeen && lastBladePage != null) { // This will force another arrange pass, but should be very rare lastBladePage.IsSelected = true; } return(finalSize); }
static void OnIsSelectedChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) { BladePage page = obj as BladePage; if (page != null) { var parentControl = page.FindParent <BladeControl>(); if (page.IsSelected) { page.RaiseEvent(new RoutedEventArgs(SelectedEvent, page)); if (parentControl != null && parentControl.IsKeyboardFocusWithin && page.lastElementWithFocus != null && page.lastElementWithFocus.IsLoaded) { page.lastElementWithFocus.Focus(); } } } }