Example #1
0
        private void ChkIsVerticallyScrollable_Checked(object sender, RoutedEventArgs e)
        {
            CheckBox        chkIsVerticallyScrollable   = sender as CheckBox;
            ComboBox        cmbVerticalScrollController = chkIsVerticallyScrollable == chkIsVerticallyScrollable1 ? cmbVerticalScrollController1 : cmbVerticalScrollController2;
            ScrollPresenter scrollPresenter             = chkIsVerticallyScrollable == chkIsVerticallyScrollable1 ? scrollPresenter1 : scrollPresenter2;

            scrollPresenter.VerticalScrollMode = ScrollMode.Enabled;
            switch (cmbVerticalScrollController.SelectedIndex)
            {
            case 1:
                verticalCompositionScrollController.IsEnabled = true;
                break;

            case 2:
                horizontalCompositionScrollController.IsEnabled = true;
                break;
            }
        }
        private void ScrollPresenter_StateChanged(ScrollPresenter sender, object args)
        {
            string           senderId = "." + sender.Name;
            FrameworkElement parent   = VisualTreeHelper.GetParent(sender) as FrameworkElement;

            if (parent != null)
            {
                senderId = "." + parent.Name + senderId;
                FrameworkElement grandParent = VisualTreeHelper.GetParent(parent) as FrameworkElement;
                if (grandParent != null)
                {
                    senderId = grandParent.Name + senderId;
                }
            }
            this.txtScrollPresenterState.Text = senderId + " " + sender.State.ToString();
            this.fullLogs.Add(senderId + " StateChanged S=" + sender.State.ToString());
            chkLogUpdated.IsChecked = false;
        }
        private void CmbHorizontalScrollChainingMode_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ComboBox        cmb             = sender as ComboBox;
            string          suffix          = cmb.Name.Substring(cmb.Name.Length - 1);
            ScrollPresenter scrollPresenter = GetScrollPresenterWithSuffix(suffix);

            if (scrollPresenter != null)
            {
                scrollPresenter.HorizontalScrollChainingMode = (ChainingMode)cmb.SelectedIndex;
            }
            else
            {
                ScrollViewer scrollViewer = GetScrollViewerWithSuffix(suffix);
                if (scrollViewer != null)
                {
                    scrollViewer.IsHorizontalScrollChainingEnabled = cmb.SelectedIndex == 0;
                }
            }
        }
        private void ScrollPresenter_AnchorRequested(ScrollPresenter sender, ScrollingAnchorRequestedEventArgs args)
        {
            try
            {
                if (chkLogScrollPresenterEvents.IsChecked == true)
                {
                    IList <UIElement> anchorCandidates = args.AnchorCandidates;

                    AppendAsyncEventMessage("AnchorRequested anchor=" + (args.AnchorElement == null ? "null" : "non-null") + ", count=" + anchorCandidates.Count);
                }

                args.AnchorElement = anchorElement;
            }
            catch (Exception ex)
            {
                txtExceptionReport.Text = ex.ToString();
                lstScrollPresenterEvents.Items.Add(ex.ToString());
            }
        }
Example #5
0
        private void ResetView(ScrollPresenter scrollPresenter)
        {
            int viewChangeId = scrollPresenter.ScrollTo(
                0.0,
                0.0,
                new ScrollingScrollOptions(AnimationMode.Disabled, SnapPointsMode.Ignore)).OffsetsChangeId;

            this.fullLogs.Add(scrollPresenter.Name + " ScrollTo requested. Id=" + viewChangeId);

            viewChangeId = scrollPresenter.ZoomTo(
                1.0f,
                System.Numerics.Vector2.Zero,
                new ScrollingZoomOptions(AnimationMode.Disabled, SnapPointsMode.Ignore)).ZoomFactorChangeId;
            this.fullLogs.Add(scrollPresenter.Name + " ZoomTo requested. Id=" + viewChangeId);
            if (this.scrollPresenter52 == scrollPresenter)
            {
                scrollPresenter52ZoomFactorChangeId = viewChangeId;
            }
        }
        private void ResetView(ScrollView scrollView)
        {
            ScrollPresenter scrollPresenter   = ScrollViewTestHooks.GetScrollPresenterPart(scrollView);
            string          scrollPresenterId = (VisualTreeHelper.GetParent(scrollPresenter) as FrameworkElement).Name + "." + scrollPresenter.Name;

            int viewChangeId = scrollPresenter.ScrollTo(0.0, 0.0, new ScrollingScrollOptions(AnimationMode.Disabled, SnapPointsMode.Ignore)).OffsetsChangeId;

            this.fullLogs.Add(scrollPresenterId + " ScrollTo requested. Id=" + viewChangeId);

            viewChangeId = scrollPresenter.ZoomTo(1.0f, System.Numerics.Vector2.Zero, new ScrollingZoomOptions(AnimationMode.Disabled, SnapPointsMode.Ignore)).ZoomFactorChangeId;
            this.fullLogs.Add(scrollPresenterId + " ZoomTo requested. Id=" + viewChangeId);

            chkLogUpdated.IsChecked = false;

            if (scrollView == this.scrollView52)
            {
                scrollView52ZoomFactorChangeId = viewChangeId;
            }
        }
        public void SettingScrollControllerProperties()
        {
            ScrollPresenter             scrollPresenter            = null;
            CompositionScrollController horizontalScrollController = null;
            CompositionScrollController verticalScrollController   = null;

            RunOnUIThread.Execute(() =>
            {
                // We need the styles of the CompositionScrollController, so let's load them
                App.AppendResourceDictionaryToMergedDictionaries(App.AdditionStylesXaml);

                scrollPresenter = new ScrollPresenter();
                Verify.IsNotNull(scrollPresenter);

                horizontalScrollController = new CompositionScrollController();
                Verify.IsNotNull(horizontalScrollController);

                verticalScrollController = new CompositionScrollController();
                Verify.IsNotNull(verticalScrollController);

                Log.Comment("Setting ScrollPresenter.HorizontalScrollController and ScrollPresenter.VerticalScrollController properties.");
                scrollPresenter.HorizontalScrollController = horizontalScrollController;
                scrollPresenter.VerticalScrollController   = verticalScrollController;
            });

            IdleSynchronizer.Wait();

            RunOnUIThread.Execute(() =>
            {
                Log.Comment("Verifying ScrollPresenter properties.");
                Verify.AreEqual(scrollPresenter.HorizontalScrollController, horizontalScrollController);
                Verify.AreEqual(scrollPresenter.VerticalScrollController, verticalScrollController);

                Verify.IsTrue(horizontalScrollController.AreScrollControllerInteractionsAllowed);
                Verify.IsTrue(horizontalScrollController.AreScrollerInteractionsAllowed);
                Verify.IsFalse(horizontalScrollController.IsInteracting);
                Verify.IsNull(horizontalScrollController.InteractionVisual);
                Verify.IsTrue(verticalScrollController.AreScrollControllerInteractionsAllowed);
                Verify.IsTrue(verticalScrollController.AreScrollerInteractionsAllowed);
                Verify.IsFalse(verticalScrollController.IsInteracting);
                Verify.IsNull(verticalScrollController.InteractionVisual);
            });
        }
Example #8
0
        public void SnapToFirstRepeatedScrollSnapPoint()
        {
            ScrollPresenter scrollPresenter = null;
            Rectangle       rectangleScrollPresenterContent = null;
            AutoResetEvent  scrollPresenterLoadedEvent      = new AutoResetEvent(false);

            RunOnUIThread.Execute(() =>
            {
                rectangleScrollPresenterContent = new Rectangle();
                scrollPresenter = new ScrollPresenter();

                SetupDefaultUI(scrollPresenter, rectangleScrollPresenterContent, scrollPresenterLoadedEvent);
            });

            WaitForEvent("Waiting for Loaded event", scrollPresenterLoadedEvent);

            // Jump to absolute offsets
            ScrollTo(scrollPresenter, 60.0, 0.0, AnimationMode.Disabled, SnapPointsMode.Default);

            // Add scroll repeated snap point with different offset and start.
            RunOnUIThread.Execute(() =>
            {
                RepeatedScrollSnapPoint snapPoint = new RepeatedScrollSnapPoint(
                    offset: 50,
                    interval: 60,
                    start: 10,
                    end: 1190,
                    alignment: ScrollSnapPointsAlignment.Near);

                scrollPresenter.HorizontalSnapPoints.Add(snapPoint);
            });

            // Flick with horizontal offset velocity to naturally land around offset 15.
            ScrollFrom(scrollPresenter, horizontalVelocity: -165.0f, verticalVelocity: 0.0f, horizontalInertiaDecayRate: null, verticalInertiaDecayRate: null, hookViewChanged: false);

            RunOnUIThread.Execute(() =>
            {
                // HorizontalOffset expected to have snapped to first instance of repeated snap point: 50.
                Verify.AreEqual(50.0, scrollPresenter.HorizontalOffset);
                Verify.AreEqual(0.0, scrollPresenter.VerticalOffset);
                Verify.AreEqual(1.0f, scrollPresenter.ZoomFactor);
            });
        }
Example #9
0
        private void ScrollPresenter_ScrollAnimationStarting(ScrollPresenter sender, ScrollingScrollAnimationStartingEventArgs args)
        {
            try
            {
                if (chkLogBringIntoViewRequestedEvents.IsChecked == true)
                {
                    AppendAsyncEventMessage("ScrollAnimationStarting ScrollPresenter=" + sender.Name + ", OffsetsChangeId=" + args.ScrollInfo.OffsetsChangeId);
                }

                Vector3KeyFrameAnimation stockKeyFrameAnimation = args.Animation as Vector3KeyFrameAnimation;

                if (stockKeyFrameAnimation != null)
                {
                    TextBox txtStockOffsetsChangeDuration   = null;
                    string  overriddenOffsetsChangeDuration = string.Empty;

                    if (sender == innerScrollPresenter || sender == innerScrollPresenter2)
                    {
                        txtStockOffsetsChangeDuration   = txtInnerStockOffsetsChangeDuration;
                        overriddenOffsetsChangeDuration = txtInnerOverriddenOffsetsChangeDuration.Text;
                    }
                    else
                    {
                        txtStockOffsetsChangeDuration   = txtOuterStockOffsetsChangeDuration;
                        overriddenOffsetsChangeDuration = txtOuterOverriddenOffsetsChangeDuration.Text;
                    }

                    txtStockOffsetsChangeDuration.Text = stockKeyFrameAnimation.Duration.TotalMilliseconds.ToString();

                    if (!string.IsNullOrWhiteSpace(overriddenOffsetsChangeDuration))
                    {
                        double durationOverride = Convert.ToDouble(overriddenOffsetsChangeDuration);
                        stockKeyFrameAnimation.Duration = TimeSpan.FromMilliseconds(durationOverride);
                    }
                }
            }
            catch (Exception ex)
            {
                txtExceptionReport.Text = ex.ToString();
                lstScrollPresenterEvents.Items.Add(ex.ToString());
            }
        }
Example #10
0
        private void ChkLogScrollPresenterEvents_Unchecked(object sender, RoutedEventArgs e)
        {
            if (scrollView != null)
            {
                ScrollPresenter scrollPresenter = ScrollViewTestHooks.GetScrollPresenterPart(scrollView);

                if (scrollPresenter != null)
                {
                    scrollPresenter.Loaded                  -= ScrollPresenter_Loaded;
                    scrollPresenter.SizeChanged             -= ScrollPresenter_SizeChanged;
                    scrollPresenter.ExtentChanged           -= ScrollPresenter_ExtentChanged;
                    scrollPresenter.StateChanged            -= ScrollPresenter_StateChanged;
                    scrollPresenter.ViewChanged             -= ScrollPresenter_ViewChanged;
                    scrollPresenter.ScrollAnimationStarting -= ScrollPresenter_ScrollAnimationStarting;
                    scrollPresenter.ZoomAnimationStarting   -= ScrollPresenter_ZoomAnimationStarting;
                    scrollPresenter.ScrollCompleted         -= ScrollPresenter_ScrollCompleted;
                    scrollPresenter.ZoomCompleted           -= ScrollPresenter_ZoomCompleted;
                }
            }
        }
        private void AnchoringAtNearEdge(Orientation orientation)
        {
            using (ScrollPresenterTestHooksHelper scrollPresenterTestHooksHelper = new ScrollPresenterTestHooksHelper(
                       enableAnchorNotifications: true,
                       enableInteractionSourcesNotifications: true,
                       enableExpressionAnimationStatusNotifications: false))
            {
                ScrollPresenter scrollPresenter            = null;
                AutoResetEvent  scrollPresenterLoadedEvent = new AutoResetEvent(false);

                RunOnUIThread.Execute(() =>
                {
                    scrollPresenter = new ScrollPresenter();

                    SetupDefaultAnchoringUI(orientation, scrollPresenter, scrollPresenterLoadedEvent);
                });

                WaitForEvent("Waiting for Loaded event", scrollPresenterLoadedEvent);

                RunOnUIThread.Execute(() =>
                {
                    Log.Comment("Inserting child at near edge");
                    InsertStackPanelChild((scrollPresenter.Content as Border).Child as StackPanel, 1 /*operationCount*/, 0 /*newIndex*/, 1 /*newCount*/);
                });

                IdleSynchronizer.Wait();

                RunOnUIThread.Execute(() =>
                {
                    Log.Comment("No ScrollPresenter offset change expected");
                    if (orientation == Orientation.Vertical)
                    {
                        Verify.AreEqual(0, scrollPresenter.VerticalOffset);
                    }
                    else
                    {
                        Verify.AreEqual(0, scrollPresenter.HorizontalOffset);
                    }
                });
            }
        }
 private void ScrollPresenter_StateChanged(ScrollPresenter sender, object args)
 {
     if (sender == scrollPresenter0)
     {
         txtScrollPresenter0State.Text = "scrollPresenter0 " + scrollPresenter0.State.ToString();
         txtScrollPresenter0HSP.Text   = String.Format("{0,5:N1}%", sender.HorizontalOffset / 3.0);
         txtScrollPresenter0VSP.Text   = String.Format("{0,5:N1}%", sender.VerticalOffset / 3.0);
     }
     else if (sender == scrollPresenter1)
     {
         txtScrollPresenter1State.Text = "scrollPresenter1 " + scrollPresenter1.State.ToString();
         txtScrollPresenter1HSP.Text   = String.Format("{0,5:N1}%", sender.HorizontalOffset / 3.0);
         txtScrollPresenter1VSP.Text   = String.Format("{0,5:N1}%", sender.VerticalOffset / 3.0);
     }
     else if (sender == scrollPresenter3)
     {
         txtScrollPresenter3State.Text = "scrollPresenter3 " + scrollPresenter3.State.ToString();
         txtScrollPresenter3HSP.Text   = String.Format("{0,5:N1}%", sender.HorizontalOffset / 3.0);
         txtScrollPresenter3VSP.Text   = String.Format("{0,5:N1}%", sender.VerticalOffset / 3.0);
     }
 }
        private void ScrollPresenter_ZoomCompleted(ScrollPresenter sender, ScrollingZoomCompletedEventArgs args)
        {
            string           senderId = "." + sender.Name;
            FrameworkElement parent   = VisualTreeHelper.GetParent(sender) as FrameworkElement;

            if (parent != null)
            {
                senderId = parent.Name + senderId;
            }

            ScrollPresenterViewChangeResult result = ScrollPresenterTestHooks.GetZoomCompletedResult(args);

            this.fullLogs.Add(senderId + " ZoomCompleted. ZoomFactorChangeId=" + args.ZoomInfo.ZoomFactorChangeId + ", Result=" + result);
            chkLogUpdated.IsChecked = false;

            if (args.ZoomInfo.ZoomFactorChangeId == scrollView52ZoomFactorChangeId)
            {
                this.txtResetStatus.Text       = "Views reset";
                scrollView52ZoomFactorChangeId = -1;
            }
        }
        private void ScrollPresenter_ScrollAnimationStarting(ScrollPresenter sender, ScrollingScrollAnimationStartingEventArgs args)
        {
            try
            {
                AppendAsyncEventMessage("ScrollAnimationStarting OffsetsChangeId=" + args.ScrollInfo.OffsetsChangeId);

                Vector3KeyFrameAnimation stockKeyFrameAnimation = args.Animation as Vector3KeyFrameAnimation;

                if (stockKeyFrameAnimation != null && !string.IsNullOrWhiteSpace(txtOverriddenOffsetsChangeDuration.Text))
                {
                    txtStockOffsetsChangeDuration.Text = stockKeyFrameAnimation.Duration.TotalMilliseconds.ToString();
                    double durationOverride = Convert.ToDouble(txtOverriddenOffsetsChangeDuration.Text);
                    stockKeyFrameAnimation.Duration = TimeSpan.FromMilliseconds(durationOverride);
                }
            }
            catch (Exception ex)
            {
                txtExceptionReport.Text = ex.ToString();
                lstScrollPresenterEvents.Items.Add(ex.ToString());
            }
        }
Example #15
0
        private void BtnCreateScrollPresenter_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
        {
            scrollPresenter                   = new ScrollPresenter();
            scrollPresenter.Name              = "dynamicScrollPresenter";
            scrollPresenter.Width             = 300.0;
            scrollPresenter.Height            = 400.0;
            scrollPresenter.Margin            = new Thickness(1);
            scrollPresenter.Background        = new SolidColorBrush(Colors.HotPink);
            scrollPresenter.VerticalAlignment = VerticalAlignment.Top;

            Rectangle rect = new Rectangle();

            rect.Width              = 900.0;
            rect.Height             = 1200.0;
            rect.Fill               = new SolidColorBrush(Colors.DarkRed);
            scrollPresenter.Content = rect;

            btnCreateScrollPresenter.IsEnabled = false;
            btnAddScrollPresenter.IsEnabled    = true;
            btnDeleteScrollPresenter.IsEnabled = true;
        }
        private void ScrollPresenter_ViewChanged(ScrollPresenter sender, object args)
        {
            if (chkLogScrollPresenterEvents.IsChecked == true)
            {
                AppendAsyncEventMessage("ViewChanged H=" + sender.HorizontalOffset.ToString() + ", V=" + sender.VerticalOffset.ToString() + ", S=" + sender.ZoomFactor.ToString());
            }

            double newScrollPresenterOffset = stackPanel.Orientation == Orientation.Horizontal ? scrollPresenter.HorizontalOffset : scrollPresenter.VerticalOffset;

            if (lstTriggeredOperations.Count > 0 &&
                ((lastScrollPresenterOffset <= 350.0 && newScrollPresenterOffset > 350.0) || (lastScrollPresenterOffset >= 350.0 && newScrollPresenterOffset < 350.0)))
            {
                ExecuteTriggerableOperations();
            }
            else
            {
                scrollPresenter.InvalidateArrange();
            }

            lastScrollPresenterOffset = newScrollPresenterOffset;
        }
        private void InitializeUIFromScrollPresenter(string suffix)
        {
            ScrollPresenter scrollPresenter = FindName("scrollPresenter" + suffix) as ScrollPresenter;

            if (scrollPresenter == null)
            {
                return;
            }

            ComboBox cmb = FindName("cmbHorizontalScrollChainingMode" + suffix) as ComboBox;

            if (cmb != null)
            {
                cmb.SelectedIndex = (int)scrollPresenter.HorizontalScrollChainingMode;
            }

            cmb = FindName("cmbVerticalScrollChainingMode" + suffix) as ComboBox;
            if (cmb != null)
            {
                cmb.SelectedIndex = (int)scrollPresenter.VerticalScrollChainingMode;
            }

            cmb = FindName("cmbZoomChainingMode" + suffix) as ComboBox;
            if (cmb != null)
            {
                cmb.SelectedIndex = (int)scrollPresenter.ZoomChainingMode;
            }

            cmb = FindName("cmbHorizontalScrollRailingMode" + suffix) as ComboBox;
            if (cmb != null)
            {
                cmb.SelectedIndex = (int)scrollPresenter.HorizontalScrollRailingMode;
            }

            cmb = FindName("cmbVerticalScrollRailingMode" + suffix) as ComboBox;
            if (cmb != null)
            {
                cmb.SelectedIndex = (int)scrollPresenter.VerticalScrollRailingMode;
            }
        }
Example #18
0
        private void ChkLogScrollPresenterEvents_Checked(object sender, RoutedEventArgs e)
        {
            if (scrollView != null)
            {
                ScrollPresenter scrollPresenter = ScrollViewTestHooks.GetScrollPresenterPart(scrollView);

                if (scrollPresenter != null)
                {
                    scrollPresenter.Loaded                  += ScrollPresenter_Loaded;
                    scrollPresenter.SizeChanged             += ScrollPresenter_SizeChanged;
                    scrollPresenter.ExtentChanged           += ScrollPresenter_ExtentChanged;
                    scrollPresenter.StateChanged            += ScrollPresenter_StateChanged;
                    scrollPresenter.ViewChanged             += ScrollPresenter_ViewChanged;
                    scrollPresenter.ScrollAnimationStarting += ScrollPresenter_ScrollAnimationStarting;
                    scrollPresenter.ZoomAnimationStarting   += ScrollPresenter_ZoomAnimationStarting;
                    scrollPresenter.ScrollCompleted         += ScrollPresenter_ScrollCompleted;
                    scrollPresenter.ZoomCompleted           += ScrollPresenter_ZoomCompleted;
                    scrollPresenter.BringingIntoView        += ScrollPresenter_BringingIntoView;
                    scrollPresenter.BringIntoViewRequested  += FrameworkElement_BringIntoViewRequested;
                }
            }
        }
Example #19
0
        private void ScrollPresenter_ViewChanged(ScrollPresenter sender, object args)
        {
            this.txtScrollPresenterHorizontalOffset.Text = sender.HorizontalOffset.ToString();
            this.txtScrollPresenterVerticalOffset.Text   = sender.VerticalOffset.ToString();
            this.txtScrollPresenterZoomFactor.Text       = sender.ZoomFactor.ToString();
            this.fullLogs.Add(sender.Name + " ViewChanged H=" + this.txtScrollPresenterHorizontalOffset.Text + ", V=" + this.txtScrollPresenterVerticalOffset.Text + ", S=" + this.txtScrollPresenterZoomFactor.Text);

            if (canScrollPresenter51ContentShrink && sender == scrollPresenter51)
            {
                FrameworkElement content = scrollPresenter51.Content as FrameworkElement;

                if (scrollPresenter51.HorizontalOffset > scrollPresenter51.ScrollableWidth + 20.0)
                {
                    canScrollPresenter51ContentShrink = false;
                    content.Width -= 30.0;
                }
                if (scrollPresenter51.VerticalOffset > scrollPresenter51.ScrollableHeight + 25.0)
                {
                    canScrollPresenter51ContentShrink = false;
                    content.Height -= 40.0;
                }
            }
        }
Example #20
0
 private void ScrollPresenter_ZoomCompleted(ScrollPresenter sender, ScrollingZoomCompletedEventArgs args)
 {
     AppendAsyncEventMessage($"ScrollPresenter.ZoomCompleted ZoomFactorChangeId={args.ZoomInfo.ZoomFactorChangeId}");
 }
        private void ScrollPresenterTestHooks_AnchorEvaluated(ScrollPresenter sender, ScrollPresenterTestHooksAnchorEvaluatedEventArgs args)
        {
            string anchorName;
            Border newAnchor = null;

            if (args.AnchorElement == null)
            {
                anchorName = "null";
            }
            else
            {
                if (args.AnchorElement is FrameworkElement)
                {
                    FrameworkElement anchorElementAsFE = args.AnchorElement as FrameworkElement;

                    if (string.IsNullOrWhiteSpace(anchorElementAsFE.Name))
                    {
                        anchorName = "unnamed-FE";
                    }
                    else
                    {
                        anchorName = anchorElementAsFE.Name;
                    }

                    newAnchor = anchorElementAsFE as Border;
                }
                else
                {
                    anchorName = "UIE";
                }
            }

            if (newAnchor != currentAnchor)
            {
                if (currentAnchor != null)
                {
                    currentAnchor.BorderBrush = chartreuseBrush;
                }
                if (newAnchor != null)
                {
                    newAnchor.BorderBrush = orangeBrush;
                }
                currentAnchor = newAnchor;
            }

            if (double.IsNaN(args.ViewportAnchorPointHorizontalOffset) && double.IsNaN(args.ViewportAnchorPointVerticalOffset))
            {
                cnsAnchorPoint.Visibility = Visibility.Collapsed;
            }
            else
            {
                cnsAnchorPoint.Visibility = Visibility.Visible;

                if (double.IsNaN(args.ViewportAnchorPointHorizontalOffset))
                {
                    rectAnchorPoint.Width = scrollPresenter.Width;
                    Canvas.SetLeft(rectAnchorPoint, 0);
                }
                else
                {
                    rectAnchorPoint.Width = double.IsNaN(args.ViewportAnchorPointVerticalOffset) ? 2 : 4;
                    Canvas.SetLeft(rectAnchorPoint, args.ViewportAnchorPointHorizontalOffset * scrollPresenter.ZoomFactor - scrollPresenter.HorizontalOffset - rectAnchorPoint.Width / 2);
                }

                if (double.IsNaN(args.ViewportAnchorPointVerticalOffset))
                {
                    rectAnchorPoint.Height = scrollPresenter.Height;
                    Canvas.SetTop(rectAnchorPoint, 0);
                }
                else
                {
                    rectAnchorPoint.Height = double.IsNaN(args.ViewportAnchorPointHorizontalOffset) ? 2 : 4;
                    Canvas.SetTop(rectAnchorPoint, args.ViewportAnchorPointVerticalOffset * scrollPresenter.ZoomFactor - scrollPresenter.VerticalOffset - rectAnchorPoint.Height / 2);
                }
            }

            if (chkLogScrollPresenterAnchorNotifications.IsChecked == true)
            {
                AppendAsyncEventMessage("  AnchorEvaluated: s:" + sender.Name + ", a:" + anchorName + ", ap:(" + (int)args.ViewportAnchorPointHorizontalOffset + ", " + (int)args.ViewportAnchorPointVerticalOffset + ")");
            }
        }
Example #22
0
        private void RefreshSnapPoints(ScrollPresenter scrollPresenter, StackPanel stackPanel)
        {
            if (scrollPresenter != null && stackPanel != null && stackPanel.Children.Count > 0)
            {
                AppendAsyncEventMessage("Populating snap points for " + scrollPresenter.Name + ":");

                ScrollSnapPoint  scrollSnapPoint;
                GeneralTransform gt = stackPanel.TransformToVisual(scrollPresenter.Content);
                Point            stackPanelOriginPoint = new Point();
                stackPanelOriginPoint = gt.TransformPoint(stackPanelOriginPoint);

                if (stackPanel.Orientation == Orientation.Horizontal)
                {
                    scrollPresenter.HorizontalSnapPoints.Clear();

                    scrollSnapPoint = new ScrollSnapPoint(stackPanelOriginPoint.X, ScrollSnapPointsAlignment.Near);
                    AppendAsyncEventMessage("Adding horizontal snap point to " + scrollPresenter.Name + " at value " + stackPanelOriginPoint.X);
                    scrollPresenter.HorizontalSnapPoints.Add(scrollSnapPoint);
                }
                else
                {
                    scrollPresenter.VerticalSnapPoints.Clear();

                    scrollSnapPoint = new ScrollSnapPoint(stackPanelOriginPoint.Y, ScrollSnapPointsAlignment.Near);
                    AppendAsyncEventMessage("Adding vertical snap point to " + scrollPresenter.Name + " at value " + stackPanelOriginPoint.Y);
                    scrollPresenter.VerticalSnapPoints.Add(scrollSnapPoint);
                }

                foreach (UIElement child in stackPanel.Children)
                {
                    FrameworkElement childAsFE = child as FrameworkElement;

                    if (childAsFE != null)
                    {
                        gt = childAsFE.TransformToVisual(stackPanel);
                        Point childOriginPoint = new Point();
                        childOriginPoint = gt.TransformPoint(childOriginPoint);

                        double    snapPointValue = 0.0;
                        Thickness margin         = childAsFE.Margin;

                        if (stackPanel.Orientation == Orientation.Horizontal)
                        {
                            snapPointValue = margin.Right + childAsFE.ActualWidth + childOriginPoint.X;
                            if (snapPointValue <= scrollPresenter.ScrollableWidth)
                            {
                                scrollSnapPoint = new ScrollSnapPoint(snapPointValue, ScrollSnapPointsAlignment.Near);
                                AppendAsyncEventMessage("Adding horizontal snap point to " + scrollPresenter.Name + " at value " + snapPointValue);
                                scrollPresenter.HorizontalSnapPoints.Add(scrollSnapPoint);
                            }
                            else
                            {
                                break;
                            }
                        }
                        else
                        {
                            snapPointValue = margin.Bottom + childAsFE.ActualHeight + childOriginPoint.Y;
                            if (snapPointValue <= scrollPresenter.ScrollableHeight)
                            {
                                scrollSnapPoint = new ScrollSnapPoint(snapPointValue, ScrollSnapPointsAlignment.Near);
                                AppendAsyncEventMessage("Adding vertical snap point to " + scrollPresenter.Name + " at value " + snapPointValue);
                                scrollPresenter.VerticalSnapPoints.Add(scrollSnapPoint);
                            }
                            else
                            {
                                break;
                            }
                        }
                    }

                    RefreshSnapPoints(scrollPresenter, child as StackPanel);
                }
            }
        }
Example #23
0
        private void BtnStartBringIntoView_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                txtInnerStockOffsetsChangeDuration.Text = string.Empty;
                txtOuterStockOffsetsChangeDuration.Text = string.Empty;

                FrameworkElement targetElement = null;
                ItemsRepeater    repeater      = null;

                switch (cmbNestingCombination.SelectedIndex)
                {
                case 0:     //ScrollPresenterInScrollPresenter (1)
                    repeater = repeater1;
                    break;

                case 2:     //ScrollPresenterInScrollViewer
                    repeater = repeater2;
                    break;

                case 3:     //ScrollViewerInScrollPresenter
                    repeater = repeater3;
                    break;

                case 4:     //ScrollViewerInScrollViewer
                    repeater = repeater4;
                    break;
                }

                Border border = null;

                if (repeater != null)
                {
                    border = repeater.TryGetElement(Convert.ToInt16(txtTargetElement.Text)) as Border;
                }
                else
                {
                    // case ScrollPresenterInScrollPresenter (2)
                    border = (innerScrollPresenter3.Content as StackPanel).Children[Convert.ToInt16(txtTargetElement.Text)] as Border;
                }

                if (border != null)
                {
                    targetElement = border.Child as FrameworkElement;

                    if (targetElement != null)
                    {
                        BringIntoViewOptions options = new BringIntoViewOptions();

                        options.AnimationDesired         = cmbAnimationDesired.SelectedIndex == 0;
                        options.HorizontalAlignmentRatio = Convert.ToDouble(txtHorizontalAlignmentRatio.Text);
                        options.VerticalAlignmentRatio   = Convert.ToDouble(txtVerticalAlignmentRatio.Text);
                        options.HorizontalOffset         = Convert.ToDouble(txtHorizontalOffset.Text);
                        options.VerticalOffset           = Convert.ToDouble(txtVerticalOffset.Text);

                        if (chkIgnoreSnapPoints.IsChecked == false)
                        {
                            ScrollPresenter scrollPresenter1 = null;
                            ScrollPresenter scrollPresenter2 = null;

                            switch (cmbNestingCombination.SelectedIndex)
                            {
                            case 0:     //ScrollPresenterInScrollPresenter (1)
                                scrollPresenter1 = outerScrollPresenter;
                                scrollPresenter2 = innerScrollPresenter;
                                break;

                            case 1:     //ScrollPresenterInScrollPresenter (2)
                                scrollPresenter1 = outerScrollPresenter3;
                                scrollPresenter2 = innerScrollPresenter3;
                                break;

                            case 2:     //ScrollPresenterInScrollViewer
                                scrollPresenter1 = innerScrollPresenter2;
                                break;

                            case 3:     //ScrollViewerInScrollPresenter
                                scrollPresenter1 = outerScrollPresenter2;
                                break;
                            }

                            if (scrollPresenter1 != null)
                            {
                                RefreshSnapPoints(scrollPresenter1, scrollPresenter1.Content as StackPanel);
                            }

                            if (scrollPresenter2 != null)
                            {
                                RefreshSnapPoints(scrollPresenter2, scrollPresenter2.Content as StackPanel);
                            }
                        }

                        if (chkLogBringIntoViewRequestedEvents.IsChecked == true)
                        {
                            AppendAsyncEventMessage("Invoking StartBringIntoView on " + targetElement.Name);
                        }
                        targetElement.StartBringIntoView(options);
                    }
                }

                if (targetElement == null && chkLogBringIntoViewRequestedEvents.IsChecked == true)
                {
                    AppendAsyncEventMessage("TargetElement not found");
                }
            }
            catch (Exception ex)
            {
                txtExceptionReport.Text = ex.ToString();
                lstScrollPresenterEvents.Items.Add(ex.ToString());
            }
        }
Example #24
0
        private void ScrollPresenter_ScrollCompleted(ScrollPresenter sender, ScrollingScrollCompletedEventArgs args)
        {
            ScrollPresenterViewChangeResult result = ScrollPresenterTestHooks.GetScrollCompletedResult(args);

            AppendAsyncEventMessage("ScrollCompleted ScrollPresenter=" + sender.Name + ", OffsetsChangeId=" + args.ScrollInfo.OffsetsChangeId + ", Result=" + result);
        }
Example #25
0
 private void ScrollPresenter_ViewChanged(ScrollPresenter sender, object args)
 {
     AppendAsyncEventMessage("ViewChanged ScrollPresenter=" + sender.Name + ", H=" + sender.HorizontalOffset.ToString() + ", V=" + sender.VerticalOffset.ToString() + ", ZF=" + sender.ZoomFactor.ToString());
 }
Example #26
0
 private void ScrollPresenter_StateChanged(ScrollPresenter sender, object args)
 {
     AppendAsyncEventMessage("StateChanged ScrollPresenter=" + sender.Name + ", State=" + sender.State.ToString());
 }
Example #27
0
 private void ScrollPresenter_ExtentChanged(ScrollPresenter sender, object args)
 {
     AppendAsyncEventMessage("ExtentChanged ScrollPresenter=" + sender.Name + ", ExtentWidth=" + sender.ExtentWidth.ToString() + ", ExtentHeight=" + sender.ExtentHeight.ToString());
 }
 private void MarkupScrollPresenter_StateChanged(ScrollPresenter sender, object args)
 {
     this.txtScrollPresenterState.Text = this.markupScrollPresenter.State.ToString();
 }
 private void MarkupScrollPresenter_ViewChanged(ScrollPresenter sender, object args)
 {
     this.txtScrollPresenterHorizontalOffset.Text = this.markupScrollPresenter.HorizontalOffset.ToString();
     this.txtScrollPresenterVerticalOffset.Text   = this.markupScrollPresenter.VerticalOffset.ToString();
     this.txtScrollPresenterZoomFactor.Text       = this.markupScrollPresenter.ZoomFactor.ToString();
 }
 private void ScrollPresenter_ViewChanged(ScrollPresenter sender, object args)
 {
     SpyAnimatedValues();
 }