示例#1
0
        void OnBladePageSelected(object sender, RoutedEventArgs e)
        {
            BladePage page = e.OriginalSource as BladePage;

            if (page != null)
            {
                this.SelectedIndex = this.ItemContainerGenerator.IndexFromContainer(page);
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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();
                    }
                }
            }
        }