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()); } }
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); }); }
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); }); }
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()); } }
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()); } }
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; } }
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; } } }
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; } } }
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 + ")"); } }
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); } } }
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()); } }
private void ScrollPresenter_ScrollCompleted(ScrollPresenter sender, ScrollingScrollCompletedEventArgs args) { ScrollPresenterViewChangeResult result = ScrollPresenterTestHooks.GetScrollCompletedResult(args); AppendAsyncEventMessage("ScrollCompleted ScrollPresenter=" + sender.Name + ", OffsetsChangeId=" + args.ScrollInfo.OffsetsChangeId + ", Result=" + result); }
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()); }
private void ScrollPresenter_StateChanged(ScrollPresenter sender, object args) { AppendAsyncEventMessage("StateChanged ScrollPresenter=" + sender.Name + ", State=" + sender.State.ToString()); }
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(); }