Beispiel #1
0
        public void VerifySimpleCollectionScenario()
        {
            var objects = new Dictionary <string, WeakReference>();

            RunOnUIThread.Execute(() =>
            {
                var rating        = new RatingControl();
                objects["Rating"] = new WeakReference(rating);

                var colorPicker        = new ColorPicker();
                objects["ColorPicker"] = new WeakReference(colorPicker);

                var navigationView        = new NavigationView();
                objects["NavigationView"] = new WeakReference(navigationView);

                var parallaxView        = new ParallaxView();
                objects["ParallaxView"] = new WeakReference(parallaxView);

                var scroller        = new Scroller();
                objects["Scroller"] = new WeakReference(scroller);

                if (PlatformConfiguration.IsOsVersionGreaterThanOrEqual(OSVersion.Redstone2))
                {
                    var scrollViewer        = new ScrollViewer();
                    objects["ScrollViewer"] = new WeakReference(scrollViewer);
                }
            });
            IdleSynchronizer.Wait();
            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();

            RunOnUIThread.Execute(() => CheckLeaks(objects));
        }
        private void UseScrollViewer(ScrollViewer sv2)
        {
            if (scrollViewer == sv2 || sv2 == null)
            {
                return;
            }

            try
            {
                if (scrollViewer == null && (chkLogScrollViewerMessages.IsChecked == true || chkLogScrollerMessages.IsChecked == true))
                {
                    MUXControlsTestHooks.LoggingMessage += MUXControlsTestHooks_LoggingMessage;

                    if (chkLogScrollerMessages.IsChecked == true)
                    {
                        MUXControlsTestHooks.SetLoggingLevelForType("Scroller", isLoggingInfoLevel: true, isLoggingVerboseLevel: true);
                    }
                    if (chkLogScrollViewerMessages.IsChecked == true)
                    {
                        MUXControlsTestHooks.SetLoggingLevelForType("ScrollViewer", isLoggingInfoLevel: true, isLoggingVerboseLevel: true);
                    }
                }

                scrollViewer = sv2;

                UpdateIsChildAvailableWidthConstrained();
                UpdateIsChildAvailableHeightConstrained();
                UpdateHorizontalScrollMode();
                UpdateVerticalScrollMode();
                UpdateZoomMode();

                UpdateWidth();
                UpdateHeight();
                UpdatePadding();
                UpdateHorizontalScrollBarVisibility();
                UpdateVerticalScrollBarVisibility();

                chkIsEnabled.IsChecked = scrollViewer.IsEnabled;
                chkIsTabStop.IsChecked = scrollViewer.IsTabStop;

                UpdateContentWidth();
                UpdateContentHeight();
                UpdateContentMargin();

                Control contentAsC = scrollViewer.Content as Control;
                if (contentAsC != null)
                {
                    chkIsContentEnabled.IsChecked = contentAsC.IsEnabled;
                    chkIsContentTabStop.IsChecked = contentAsC.IsTabStop;
                }
            }
            catch (Exception ex)
            {
                txtExceptionReport.Text = ex.ToString();
                lstLogs.Items.Add(ex.ToString());
            }
        }
        public void VerifyPropertyValuesAfterTemplateApplication()
        {
            if (PlatformConfiguration.IsOSVersionLessThan(OSVersion.Redstone2))
            {
                Log.Warning("Test is disabled on pre-RS2 because ScrollViewer not supported pre-RS2");
                return;
            }

            using (PrivateLoggingHelper privateSVLoggingHelper = new PrivateLoggingHelper("ScrollViewer", "Scroller"))
            {
                ScrollViewer   scrollViewer = null;
                Rectangle      rectangleScrollViewerContent = null;
                AutoResetEvent scrollViewerLoadedEvent      = new AutoResetEvent(false);
                AutoResetEvent scrollViewerUnloadedEvent    = new AutoResetEvent(false);

                RunOnUIThread.Execute(() =>
                {
                    rectangleScrollViewerContent = new Rectangle();
                    scrollViewer = new ScrollViewer();

                    SetupDefaultUI(scrollViewer, rectangleScrollViewerContent, scrollViewerLoadedEvent, scrollViewerUnloadedEvent);
                });

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

                RunOnUIThread.Execute(() =>
                {
                    Log.Comment("Verifying ScrollViewer property values after Loaded event");
                    Verify.AreEqual(scrollViewer.Content, rectangleScrollViewerContent);
                    Verify.IsNotNull(ScrollViewerTestHooks.GetScrollerPart(scrollViewer));
                    Verify.AreEqual(ScrollViewerTestHooks.GetScrollerPart(scrollViewer).Content, rectangleScrollViewerContent);
                    Verify.IsNotNull(scrollViewer.HorizontalScrollController);
                    Verify.IsNotNull(scrollViewer.VerticalScrollController);
                    Verify.AreEqual(scrollViewer.ExtentWidth, c_defaultUIScrollViewerContentWidth);
                    Verify.AreEqual(scrollViewer.ExtentHeight, c_defaultUIScrollViewerContentHeight);
                    Verify.AreEqual(scrollViewer.ViewportWidth, c_defaultUIScrollViewerWidth);
                    Verify.AreEqual(scrollViewer.ViewportHeight, c_defaultUIScrollViewerHeight);
                    Verify.AreEqual(scrollViewer.ScrollableWidth, c_defaultUIScrollViewerContentWidth - c_defaultUIScrollViewerWidth);
                    Verify.AreEqual(scrollViewer.ScrollableHeight, c_defaultUIScrollViewerContentHeight - c_defaultUIScrollViewerHeight);

                    Log.Comment("Resetting window content and ScrollViewer");
                    MUXControlsTestApp.App.TestContentRoot = null;
                    scrollViewer = null;
                });

                WaitForEvent("Waiting for Unloaded event", scrollViewerUnloadedEvent);

                IdleSynchronizer.Wait();
                Log.Comment("Garbage collecting...");
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
                Log.Comment("Done");
            }
        }
        public void VerifyDefaultPropertyValues()
        {
            if (PlatformConfiguration.IsOSVersionLessThan(OSVersion.Redstone2))
            {
                Log.Warning("Test is disabled on pre-RS2 because ScrollViewer not supported pre-RS2");
                return;
            }

            RunOnUIThread.Execute(() =>
            {
                ScrollViewer scrollViewer = new ScrollViewer();
                Verify.IsNotNull(scrollViewer);

                Log.Comment("Verifying ScrollViewer default property values");
                Verify.IsNull(scrollViewer.Content);
                Verify.IsNull(ScrollViewerTestHooks.GetScrollerPart(scrollViewer));
                Verify.IsNull(scrollViewer.HorizontalScrollController);
                Verify.IsNull(scrollViewer.VerticalScrollController);
#if USE_SCROLLMODE_AUTO
                Verify.AreEqual(scrollViewer.ComputedHorizontalScrollMode, c_defaultComputedHorizontalScrollMode);
                Verify.AreEqual(scrollViewer.ComputedVerticalScrollMode, c_defaultComputedVerticalScrollMode);
#endif
                Verify.AreEqual(scrollViewer.InputKind, c_defaultInputKind);
                Verify.AreEqual(scrollViewer.ContentOrientation, c_defaultContentOrientation);
                Verify.AreEqual(scrollViewer.HorizontalScrollChainingMode, c_defaultHorizontalScrollChainingMode);
                Verify.AreEqual(scrollViewer.VerticalScrollChainingMode, c_defaultVerticalScrollChainingMode);
                Verify.AreEqual(scrollViewer.HorizontalScrollRailingMode, c_defaultHorizontalScrollRailingMode);
                Verify.AreEqual(scrollViewer.VerticalScrollRailingMode, c_defaultVerticalScrollRailingMode);
                Verify.AreEqual(scrollViewer.HorizontalScrollMode, c_defaultHorizontalScrollMode);
                Verify.AreEqual(scrollViewer.VerticalScrollMode, c_defaultVerticalScrollMode);
                Verify.AreEqual(scrollViewer.ZoomMode, c_defaultZoomMode);
                Verify.AreEqual(scrollViewer.ZoomChainingMode, c_defaultZoomChainingMode);
                Verify.IsGreaterThan(scrollViewer.MinZoomFactor, c_defaultMinZoomFactor - c_epsilon);
                Verify.IsLessThan(scrollViewer.MinZoomFactor, c_defaultMinZoomFactor + c_epsilon);
                Verify.IsGreaterThan(scrollViewer.MaxZoomFactor, c_defaultMaxZoomFactor - c_epsilon);
                Verify.IsLessThan(scrollViewer.MaxZoomFactor, c_defaultMaxZoomFactor + c_epsilon);
                Verify.AreEqual(scrollViewer.HorizontalAnchorRatio, c_defaultAnchorRatio);
                Verify.AreEqual(scrollViewer.VerticalAnchorRatio, c_defaultAnchorRatio);
                Verify.AreEqual(scrollViewer.IsAnchoredAtHorizontalExtent, c_defaultIsAnchoredAtExtent);
                Verify.AreEqual(scrollViewer.IsAnchoredAtVerticalExtent, c_defaultIsAnchoredAtExtent);
                Verify.AreEqual(scrollViewer.ExtentWidth, 0.0);
                Verify.AreEqual(scrollViewer.ExtentHeight, 0.0);
                Verify.AreEqual(scrollViewer.ViewportWidth, 0.0);
                Verify.AreEqual(scrollViewer.ViewportHeight, 0.0);
                Verify.AreEqual(scrollViewer.ScrollableWidth, 0.0);
                Verify.AreEqual(scrollViewer.ScrollableHeight, 0.0);
            });
        }
        private void ResetView(ScrollViewer scrollViewer)
        {
            Scroller scroller   = ScrollViewerTestHooks.GetScrollerPart(scrollViewer);
            string   scrollerId = (VisualTreeHelper.GetParent(scroller) as FrameworkElement).Name + "." + scroller.Name;

            int viewChangeId = scroller.ChangeOffsets(new ScrollerChangeOffsetsOptions(0.0, 0.0, ScrollerViewKind.Absolute, ScrollerViewChangeKind.DisableAnimation, ScrollerViewChangeSnapPointRespect.IgnoreSnapPoints));

            this.fullLogs.Add(scrollerId + " ChangeOffsets requested. Id=" + viewChangeId);

            viewChangeId = scroller.ChangeZoomFactor(new ScrollerChangeZoomFactorOptions(1.0f, ScrollerViewKind.Absolute, System.Numerics.Vector2.Zero, ScrollerViewChangeKind.DisableAnimation, ScrollerViewChangeSnapPointRespect.IgnoreSnapPoints));
            this.fullLogs.Add(scrollerId + " ChangeZoomFactor requested. Id=" + viewChangeId);

            if (scrollViewer == this.scrollViewer52)
            {
                scrollViewer52ZoomFactorChangeId = viewChangeId;
            }
        }
        private void ResetView(ScrollViewer scrollViewer)
        {
            Scroller scroller   = ScrollViewerTestHooks.GetScrollerPart(scrollViewer);
            string   scrollerId = (VisualTreeHelper.GetParent(scroller) as FrameworkElement).Name + "." + scroller.Name;

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

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

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

            if (scrollViewer == this.scrollViewer52)
            {
                scrollViewer52ZoomFactorChangeId = viewChangeId;
            }
        }
        private void CmbIgnoredInputKind_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            InputKind    ignoredInputKind;
            ScrollViewer scrollViewer = SelectedScrollViewer;

            switch (cmbIgnoredInputKind.SelectedIndex)
            {
            case 0:
                return;

            case 1:
                ignoredInputKind = InputKind.None;
                break;

            case 2:
                ignoredInputKind = InputKind.Touch;
                break;

            case 3:
                ignoredInputKind = InputKind.Pen;
                break;

            case 4:
                ignoredInputKind = InputKind.MouseWheel;
                break;

            case 5:
                ignoredInputKind = InputKind.Keyboard;
                break;

            case 6:
                ignoredInputKind = InputKind.Gamepad;
                break;

            default:
                ignoredInputKind = InputKind.All;
                break;
            }

            scrollViewer.IgnoredInputKind = ignoredInputKind;
        }
 private void ScrollViewer_ExtentChanged(ScrollViewer sender, object args)
 {
     AppendAsyncEventMessage($"ScrollViewer.ExtentChanged ExtentWidth={sender.ExtentWidth}, ExtentHeight={sender.ExtentHeight}");
 }
        private void CmbShowScrollViewer_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (this.scrollViewer11 != null)
            {
                if (cmbShowScrollViewer.SelectedIndex == 0)
                {
                    this.scrollViewer11.Visibility = Visibility.Visible;
                    this.scrollViewer21.Visibility = Visibility.Visible;
                    this.scrollViewer31.Visibility = Visibility.Visible;
                    this.scrollViewer41.Visibility = Visibility.Visible;
                    this.scrollViewer51.Visibility = Visibility.Visible;
                    this.scrollViewer12.Visibility = Visibility.Visible;
                    this.scrollViewer22.Visibility = Visibility.Visible;
                    this.scrollViewer32.Visibility = Visibility.Visible;
                    this.scrollViewer42.Visibility = Visibility.Visible;
                    this.scrollViewer52.Visibility = Visibility.Visible;

                    this.scrollViewer11.Width  = double.NaN;
                    this.scrollViewer21.Width  = double.NaN;
                    this.scrollViewer31.Width  = double.NaN;
                    this.scrollViewer41.Width  = double.NaN;
                    this.scrollViewer51.Width  = double.NaN;
                    this.scrollViewer12.Width  = double.NaN;
                    this.scrollViewer22.Width  = double.NaN;
                    this.scrollViewer32.Width  = double.NaN;
                    this.scrollViewer42.Width  = double.NaN;
                    this.scrollViewer52.Width  = double.NaN;
                    this.scrollViewer11.Height = double.NaN;
                    this.scrollViewer21.Height = double.NaN;
                    this.scrollViewer31.Height = double.NaN;
                    this.scrollViewer41.Height = double.NaN;
                    this.scrollViewer51.Height = double.NaN;
                    this.scrollViewer12.Height = double.NaN;
                    this.scrollViewer22.Height = double.NaN;
                    this.scrollViewer32.Height = double.NaN;
                    this.scrollViewer42.Height = double.NaN;
                    this.scrollViewer52.Height = double.NaN;

                    for (int rowIndex = 2; rowIndex < 4; rowIndex++)
                    {
                        this.rootGrid.RowDefinitions[rowIndex].Height = new GridLength(1, GridUnitType.Star);
                    }

                    for (int columnIndex = 0; columnIndex < 5; columnIndex++)
                    {
                        this.rootGrid.ColumnDefinitions[columnIndex].Width = new GridLength(1, GridUnitType.Star);
                    }
                }
                else
                {
                    this.scrollViewer11.Visibility = Visibility.Collapsed;
                    this.scrollViewer21.Visibility = Visibility.Collapsed;
                    this.scrollViewer31.Visibility = Visibility.Collapsed;
                    this.scrollViewer41.Visibility = Visibility.Collapsed;
                    this.scrollViewer51.Visibility = Visibility.Collapsed;
                    this.scrollViewer12.Visibility = Visibility.Collapsed;
                    this.scrollViewer22.Visibility = Visibility.Collapsed;
                    this.scrollViewer32.Visibility = Visibility.Collapsed;
                    this.scrollViewer42.Visibility = Visibility.Collapsed;
                    this.scrollViewer52.Visibility = Visibility.Collapsed;

                    for (int rowIndex = 2; rowIndex < 4; rowIndex++)
                    {
                        this.rootGrid.RowDefinitions[rowIndex].Height = GridLength.Auto;
                    }

                    for (int columnIndex = 0; columnIndex < 5; columnIndex++)
                    {
                        this.rootGrid.ColumnDefinitions[columnIndex].Width = GridLength.Auto;
                    }

                    ScrollViewer scrollViewer = null;

                    switch (cmbShowScrollViewer.SelectedIndex)
                    {
                    case 1:
                        scrollViewer = this.scrollViewer11;
                        break;

                    case 2:
                        scrollViewer = this.scrollViewer21;
                        break;

                    case 3:
                        scrollViewer = this.scrollViewer31;
                        break;

                    case 4:
                        scrollViewer = this.scrollViewer41;
                        break;

                    case 5:
                        scrollViewer = this.scrollViewer51;
                        break;

                    case 6:
                        scrollViewer = this.scrollViewer12;
                        break;

                    case 7:
                        scrollViewer = this.scrollViewer22;
                        break;

                    case 8:
                        scrollViewer = this.scrollViewer32;
                        break;

                    case 9:
                        scrollViewer = this.scrollViewer42;
                        break;

                    case 10:
                        scrollViewer = this.scrollViewer52;
                        break;
                    }

                    scrollViewer.Visibility = Visibility.Visible;
                    scrollViewer.Width      = 300;
                    scrollViewer.Height     = 400;

                    txtScrollerHorizontalOffset.Text = scrollViewer.HorizontalOffset.ToString();
                    txtScrollerVerticalOffset.Text   = scrollViewer.VerticalOffset.ToString();
                    txtScrollerZoomFactor.Text       = scrollViewer.ZoomFactor.ToString();
                }
            }
        }
 private void ScrollViewer_ZoomCompleted(ScrollViewer sender, ZoomCompletedEventArgs args)
 {
     AppendAsyncEventMessage($"ScrollViewer.ZoomCompleted ZoomFactorChangeId={args.ZoomInfo.ZoomFactorChangeId}");
 }
 private void ScrollViewer_ScrollCompleted(ScrollViewer sender, ScrollCompletedEventArgs args)
 {
     AppendAsyncEventMessage($"ScrollViewer.ScrollCompleted OffsetsChangeId={args.ScrollInfo.OffsetsChangeId}");
 }
 private void ScrollViewer_ZoomAnimationStarting(ScrollViewer sender, ZoomAnimationStartingEventArgs args)
 {
     AppendAsyncEventMessage($"ScrollViewer.ZoomAnimationStarting ZoomFactorChangeId={args.ZoomInfo.ZoomFactorChangeId}, CenterPoint={args.CenterPoint}");
 }
 private void ScrollViewer_ScrollAnimationStarting(ScrollViewer sender, ScrollAnimationStartingEventArgs args)
 {
     AppendAsyncEventMessage($"ScrollViewer.ScrollAnimationStarting OffsetsChangeId={args.ScrollInfo.OffsetsChangeId}");
 }
 private void ScrollViewer_ViewChanged(ScrollViewer sender, object args)
 {
     AppendAsyncEventMessage($"ScrollViewer.ViewChanged HorizontalOffset={sender.HorizontalOffset.ToString()}, VerticalOffset={sender.VerticalOffset}, ZoomFactor={sender.ZoomFactor}");
 }
 private void ScrollViewer_StateChanged(ScrollViewer sender, object args)
 {
     AppendAsyncEventMessage($"ScrollViewer.StateChanged {sender.State.ToString()}");
 }
        private void VerifyVisualStates(ScrollBarVisibility scrollBarVisibility, bool autoHideScrollControllers)
        {
            using (PrivateLoggingHelper privateSVLoggingHelper = new PrivateLoggingHelper("ScrollViewer"))
            {
                ScrollViewer scrollViewer = null;

                RunOnUIThread.Execute(() =>
                {
                    MUXControlsTestHooks.LoggingMessage += MUXControlsTestHooks_LoggingMessageForVisualStateChange;
                    m_scrollViewerVisualStateCounts      = new ScrollViewerVisualStateCounts();
                    scrollViewer = new ScrollViewer();
                });

                using (ScrollViewerTestHooksHelper scrollViewerTestHooksHelper = new ScrollViewerTestHooksHelper(scrollViewer, autoHideScrollControllers))
                {
                    Rectangle      rectangleScrollViewerContent = null;
                    AutoResetEvent scrollViewerLoadedEvent      = new AutoResetEvent(false);
                    AutoResetEvent scrollViewerUnloadedEvent    = new AutoResetEvent(false);

                    RunOnUIThread.Execute(() =>
                    {
                        rectangleScrollViewerContent = new Rectangle();
                        scrollViewer.HorizontalScrollBarVisibility = scrollBarVisibility;
                        scrollViewer.VerticalScrollBarVisibility   = scrollBarVisibility;

                        SetupDefaultUI(
                            scrollViewer: scrollViewer,
                            rectangleScrollViewerContent: rectangleScrollViewerContent,
                            scrollViewerLoadedEvent: scrollViewerLoadedEvent,
                            scrollViewerUnloadedEvent: scrollViewerUnloadedEvent,
                            setAsContentRoot: true,
                            useParentGrid: true);
                    });

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

                    RunOnUIThread.Execute(() =>
                    {
                        MUXControlsTestHooks.LoggingMessage -= MUXControlsTestHooks_LoggingMessageForVisualStateChange;
                        Log.Comment($"VerifyVisualStates: isEnabled:True, scrollBarVisibility:{scrollBarVisibility}, autoHideScrollControllers:{autoHideScrollControllers}");

                        VerifyVisualStates(
                            expectedMouseIndicatorStateCount: autoHideScrollControllers ? 0u : (scrollBarVisibility == ScrollBarVisibility.Auto ? 2u : 3u),
                            expectedTouchIndicatorStateCount: 0,
                            expectedNoIndicatorStateCount: autoHideScrollControllers ? (scrollBarVisibility == ScrollBarVisibility.Auto ? 2u : 3u) : 0u,
                            expectedScrollBarsSeparatorCollapsedStateCount: autoHideScrollControllers ? (scrollBarVisibility == ScrollBarVisibility.Auto ? 1u : 3u) : 0u,
                            expectedScrollBarsSeparatorCollapsedDisabledStateCount: 0,
                            expectedScrollBarsSeparatorExpandedStateCount: autoHideScrollControllers ? 0u : (scrollBarVisibility == ScrollBarVisibility.Auto ? 1u : 3u),
                            expectedScrollBarsSeparatorDisplayedWithoutAnimationStateCount: 0,
                            expectedScrollBarsSeparatorExpandedWithoutAnimationStateCount: 0,
                            expectedScrollBarsSeparatorCollapsedWithoutAnimationStateCount: 0);

                        m_scrollViewerVisualStateCounts.ResetStateCounts();
                        MUXControlsTestHooks.LoggingMessage += MUXControlsTestHooks_LoggingMessageForVisualStateChange;

                        Log.Comment("Disabling ScrollViewer");
                        scrollViewer.IsEnabled = false;
                    });

                    IdleSynchronizer.Wait();

                    RunOnUIThread.Execute(() =>
                    {
                        MUXControlsTestHooks.LoggingMessage -= MUXControlsTestHooks_LoggingMessageForVisualStateChange;
                        Log.Comment($"VerifyVisualStates: isEnabled:False, scrollBarVisibility:{scrollBarVisibility}, autoHideScrollControllers:{autoHideScrollControllers}");

                        VerifyVisualStates(
                            expectedMouseIndicatorStateCount: autoHideScrollControllers ? 0u : (scrollBarVisibility == ScrollBarVisibility.Auto ? 1u : 3u),
                            expectedTouchIndicatorStateCount: 0,
                            expectedNoIndicatorStateCount: autoHideScrollControllers ? (scrollBarVisibility == ScrollBarVisibility.Auto ? 1u : 3u) : 0u,
                            expectedScrollBarsSeparatorCollapsedStateCount: 0,
                            expectedScrollBarsSeparatorCollapsedDisabledStateCount: scrollBarVisibility == ScrollBarVisibility.Auto ? 0u : 3u,
                            expectedScrollBarsSeparatorExpandedStateCount: 0,
                            expectedScrollBarsSeparatorDisplayedWithoutAnimationStateCount: 0,
                            expectedScrollBarsSeparatorExpandedWithoutAnimationStateCount: 0,
                            expectedScrollBarsSeparatorCollapsedWithoutAnimationStateCount: 0);

                        m_scrollViewerVisualStateCounts.ResetStateCounts();
                        MUXControlsTestHooks.LoggingMessage += MUXControlsTestHooks_LoggingMessageForVisualStateChange;

                        Log.Comment("Enabling ScrollViewer");
                        scrollViewer.IsEnabled = true;
                    });

                    IdleSynchronizer.Wait();

                    RunOnUIThread.Execute(() =>
                    {
                        MUXControlsTestHooks.LoggingMessage -= MUXControlsTestHooks_LoggingMessageForVisualStateChange;
                        Log.Comment($"VerifyVisualStates: isEnabled:True, scrollBarVisibility:{scrollBarVisibility}, autoHideScrollControllers:{autoHideScrollControllers}");

                        VerifyVisualStates(
                            expectedMouseIndicatorStateCount: autoHideScrollControllers ? 0u : 3u,
                            expectedTouchIndicatorStateCount: 0,
                            expectedNoIndicatorStateCount: autoHideScrollControllers ? 3u : 0u,
                            expectedScrollBarsSeparatorCollapsedStateCount: autoHideScrollControllers ? (scrollBarVisibility == ScrollBarVisibility.Auto ? 2u : 3u) : 0u,
                            expectedScrollBarsSeparatorCollapsedDisabledStateCount: 0,
                            expectedScrollBarsSeparatorExpandedStateCount: autoHideScrollControllers ? 0u : (scrollBarVisibility == ScrollBarVisibility.Auto ? 2u : 3u),
                            expectedScrollBarsSeparatorDisplayedWithoutAnimationStateCount: 0,
                            expectedScrollBarsSeparatorExpandedWithoutAnimationStateCount: 0,
                            expectedScrollBarsSeparatorCollapsedWithoutAnimationStateCount: 0);

                        Log.Comment("Resetting window content");
                        MUXControlsTestApp.App.TestContentRoot = null;
                        m_scrollViewerVisualStateCounts        = null;
                    });

                    WaitForEvent("Waiting for Unloaded event", scrollViewerUnloadedEvent);
                }
            }
        }
        public void VerifyScrollerAttachedProperties()
        {
            if (PlatformConfiguration.IsOSVersionLessThan(OSVersion.Redstone2))
            {
                Log.Warning("Test is disabled on pre-RS2 because ScrollViewer not supported pre-RS2");
                return;
            }

            using (PrivateLoggingHelper privateSVLoggingHelper = new PrivateLoggingHelper("ScrollViewer", "Scroller"))
            {
                ScrollViewer   scrollViewer = null;
                Rectangle      rectangleScrollViewerContent = null;
                AutoResetEvent scrollViewerLoadedEvent      = new AutoResetEvent(false);
                AutoResetEvent scrollViewerUnloadedEvent    = new AutoResetEvent(false);

                RunOnUIThread.Execute(() =>
                {
                    rectangleScrollViewerContent = new Rectangle();
                    scrollViewer = new ScrollViewer();

                    SetupDefaultUI(scrollViewer, rectangleScrollViewerContent, scrollViewerLoadedEvent, scrollViewerUnloadedEvent);
                });

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

                RunOnUIThread.Execute(() =>
                {
                    Log.Comment("Setting Scroller-cloned properties to non-default values");
                    scrollViewer.InputKind = InputKind.MouseWheel | InputKind.Pen;
                    scrollViewer.IsChildAvailableWidthConstrained  = !c_defaultIsChildAvailableWidthConstrained;
                    scrollViewer.IsChildAvailableHeightConstrained = !c_defaultIsChildAvailableHeightConstrained;
                    scrollViewer.HorizontalScrollChainingMode      = ChainingMode.Always;
                    scrollViewer.VerticalScrollChainingMode        = ChainingMode.Never;
                    scrollViewer.HorizontalScrollRailingMode       = RailingMode.Disabled;
                    scrollViewer.VerticalScrollRailingMode         = RailingMode.Disabled;
                    scrollViewer.HorizontalScrollMode = ScrollMode.Enabled;
                    scrollViewer.VerticalScrollMode   = ScrollMode.Disabled;
                    scrollViewer.ZoomMode             = ZoomMode.Enabled;
                    scrollViewer.ZoomChainingMode     = ChainingMode.Never;
                    scrollViewer.MinZoomFactor        = 2.0;
                    scrollViewer.MaxZoomFactor        = 8.0;

                    Log.Comment("Verifying Scroller-cloned non-default properties");
                    Verify.AreEqual(scrollViewer.InputKind, InputKind.MouseWheel | InputKind.Pen);
                    Verify.AreEqual(scrollViewer.IsChildAvailableWidthConstrained, !c_defaultIsChildAvailableWidthConstrained);
                    Verify.AreEqual(scrollViewer.IsChildAvailableHeightConstrained, !c_defaultIsChildAvailableHeightConstrained);
                    Verify.AreEqual(scrollViewer.HorizontalScrollChainingMode, ChainingMode.Always);
                    Verify.AreEqual(scrollViewer.VerticalScrollChainingMode, ChainingMode.Never);
                    Verify.AreEqual(scrollViewer.HorizontalScrollRailingMode, RailingMode.Disabled);
                    Verify.AreEqual(scrollViewer.VerticalScrollRailingMode, RailingMode.Disabled);
                    Verify.AreEqual(scrollViewer.HorizontalScrollMode, ScrollMode.Enabled);
                    Verify.AreEqual(scrollViewer.VerticalScrollMode, ScrollMode.Disabled);
                    Verify.AreEqual(scrollViewer.ComputedHorizontalScrollMode, ScrollMode.Enabled);
                    Verify.AreEqual(scrollViewer.ComputedVerticalScrollMode, ScrollMode.Disabled);
                    Verify.AreEqual(scrollViewer.ZoomMode, ZoomMode.Enabled);
                    Verify.AreEqual(scrollViewer.ZoomChainingMode, ChainingMode.Never);
                    Verify.IsGreaterThan(scrollViewer.MinZoomFactor, 2.0 - c_epsilon);
                    Verify.IsLessThan(scrollViewer.MinZoomFactor, 2.0 + c_epsilon);
                    Verify.IsGreaterThan(scrollViewer.MaxZoomFactor, 8.0 - c_epsilon);
                    Verify.IsLessThan(scrollViewer.MaxZoomFactor, 8.0 + c_epsilon);

                    Log.Comment("Resetting window content and ScrollViewer");
                    MUXControlsTestApp.App.TestContentRoot = null;
                    scrollViewer = null;
                });

                WaitForEvent("Waiting for Unloaded event", scrollViewerUnloadedEvent);

                IdleSynchronizer.Wait();
                Log.Comment("Garbage collecting...");
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
                Log.Comment("Done");
            }
        }
        private void CmbShowScrollViewer_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (this.scrollViewer11 != null)
            {
                if (cmbShowScrollViewer.SelectedIndex == 0)
                {
                    this.scrollViewer11.Visibility = Visibility.Visible;
                    this.scrollViewer21.Visibility = Visibility.Visible;
                    this.scrollViewer31.Visibility = Visibility.Visible;
                    this.scrollViewer41.Visibility = Visibility.Visible;
                    this.scrollViewer51.Visibility = Visibility.Visible;
                    this.scrollViewer12.Visibility = Visibility.Visible;
                    this.scrollViewer22.Visibility = Visibility.Visible;
                    this.scrollViewer32.Visibility = Visibility.Visible;
                    this.scrollViewer42.Visibility = Visibility.Visible;
                    this.scrollViewer52.Visibility = Visibility.Visible;

                    this.scrollViewer11.Width  = double.NaN;
                    this.scrollViewer21.Width  = double.NaN;
                    this.scrollViewer31.Width  = double.NaN;
                    this.scrollViewer41.Width  = double.NaN;
                    this.scrollViewer51.Width  = double.NaN;
                    this.scrollViewer12.Width  = double.NaN;
                    this.scrollViewer22.Width  = double.NaN;
                    this.scrollViewer32.Width  = double.NaN;
                    this.scrollViewer42.Width  = double.NaN;
                    this.scrollViewer52.Width  = double.NaN;
                    this.scrollViewer11.Height = double.NaN;
                    this.scrollViewer21.Height = double.NaN;
                    this.scrollViewer31.Height = double.NaN;
                    this.scrollViewer41.Height = double.NaN;
                    this.scrollViewer51.Height = double.NaN;
                    this.scrollViewer12.Height = double.NaN;
                    this.scrollViewer22.Height = double.NaN;
                    this.scrollViewer32.Height = double.NaN;
                    this.scrollViewer42.Height = double.NaN;
                    this.scrollViewer52.Height = double.NaN;

                    for (int rowIndex = 2; rowIndex < 4; rowIndex++)
                    {
                        this.rootGrid.RowDefinitions[rowIndex].Height = new GridLength(1, GridUnitType.Star);
                    }

                    for (int columnIndex = 0; columnIndex < 5; columnIndex++)
                    {
                        this.rootGrid.ColumnDefinitions[columnIndex].Width = new GridLength(1, GridUnitType.Star);
                    }

                    cmbIgnoredInputKind.IsEnabled     = false;
                    cmbIgnoredInputKind.SelectedIndex = 0;
                }
                else
                {
                    this.scrollViewer11.Visibility = Visibility.Collapsed;
                    this.scrollViewer21.Visibility = Visibility.Collapsed;
                    this.scrollViewer31.Visibility = Visibility.Collapsed;
                    this.scrollViewer41.Visibility = Visibility.Collapsed;
                    this.scrollViewer51.Visibility = Visibility.Collapsed;
                    this.scrollViewer12.Visibility = Visibility.Collapsed;
                    this.scrollViewer22.Visibility = Visibility.Collapsed;
                    this.scrollViewer32.Visibility = Visibility.Collapsed;
                    this.scrollViewer42.Visibility = Visibility.Collapsed;
                    this.scrollViewer52.Visibility = Visibility.Collapsed;

                    for (int rowIndex = 2; rowIndex < 4; rowIndex++)
                    {
                        this.rootGrid.RowDefinitions[rowIndex].Height = GridLength.Auto;
                    }

                    for (int columnIndex = 0; columnIndex < 5; columnIndex++)
                    {
                        this.rootGrid.ColumnDefinitions[columnIndex].Width = GridLength.Auto;
                    }

                    cmbIgnoredInputKind.IsEnabled = true;

                    ScrollViewer scrollViewer = SelectedScrollViewer;

                    scrollViewer.Visibility = Visibility.Visible;
                    scrollViewer.Width      = 300;
                    scrollViewer.Height     = 400;

                    txtScrollerHorizontalOffset.Text = scrollViewer.HorizontalOffset.ToString();
                    txtScrollerVerticalOffset.Text   = scrollViewer.VerticalOffset.ToString();
                    txtScrollerZoomFactor.Text       = scrollViewer.ZoomFactor.ToString();

                    switch (scrollViewer.IgnoredInputKind)
                    {
                    case InputKind.None:
                        cmbIgnoredInputKind.SelectedIndex = 1;
                        break;

                    case InputKind.Touch:
                        cmbIgnoredInputKind.SelectedIndex = 2;
                        break;

                    case InputKind.Pen:
                        cmbIgnoredInputKind.SelectedIndex = 3;
                        break;

                    case InputKind.MouseWheel:
                        cmbIgnoredInputKind.SelectedIndex = 4;
                        break;

                    case InputKind.Keyboard:
                        cmbIgnoredInputKind.SelectedIndex = 5;
                        break;

                    case InputKind.Gamepad:
                        cmbIgnoredInputKind.SelectedIndex = 6;
                        break;

                    case InputKind.All:
                        cmbIgnoredInputKind.SelectedIndex = 7;
                        break;

                    default:
                        cmbIgnoredInputKind.SelectedIndex = 0;
                        break;
                    }
                }
            }
        }
Beispiel #19
0
        public void VerifyAnchorCandidateRegistration()
        {
            if (PlatformConfiguration.IsOSVersionLessThan(OSVersion.Redstone2))
            {
                Log.Warning("Test is disabled on pre-RS2 because ScrollViewer not supported pre-RS2");
                return;
            }

            using (PrivateLoggingHelper privateSVLoggingHelper = new PrivateLoggingHelper("ScrollViewer", "Scroller"))
            {
                int            expectedAnchorCandidatesCount = 0;
                Scroller       scroller     = null;
                ScrollViewer   scrollViewer = null;
                Rectangle      rectangleScrollViewerContent     = null;
                AutoResetEvent scrollViewerLoadedEvent          = new AutoResetEvent(false);
                AutoResetEvent scrollViewerAnchorRequestedEvent = new AutoResetEvent(false);

                RunOnUIThread.Execute(() =>
                {
                    rectangleScrollViewerContent = new Rectangle();
                    scrollViewer = new ScrollViewer();
                    scrollViewer.HorizontalAnchorRatio = 0.1;

                    SetupDefaultUI(scrollViewer, rectangleScrollViewerContent, scrollViewerLoadedEvent);

                    scrollViewer.AnchorRequested += (ScrollViewer sender, ScrollerAnchorRequestedEventArgs args) =>
                    {
                        Log.Comment("ScrollViewer.AnchorRequested event handler. args.AnchorCandidates.Count: " + args.AnchorCandidates.Count);
                        Verify.IsNull(args.AnchorElement);
                        Verify.AreEqual(expectedAnchorCandidatesCount, args.AnchorCandidates.Count);
                        scrollViewerAnchorRequestedEvent.Set();
                    };
                });

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

                RunOnUIThread.Execute(() =>
                {
                    Log.Comment("Accessing inner Scroller control");
                    scroller = ScrollViewerTestHooks.GetScrollerPart(scrollViewer);

                    Log.Comment("Registering Rectangle as anchor candidate");
                    scrollViewer.RegisterAnchorCandidate(rectangleScrollViewerContent);
                    expectedAnchorCandidatesCount = 1;

                    Log.Comment("Forcing Scroller layout");
                    scroller.InvalidateArrange();
                });

                WaitForEvent("Waiting for AnchorRequested event", scrollViewerAnchorRequestedEvent);

                RunOnUIThread.Execute(() =>
                {
                    Log.Comment("Unregistering Rectangle as anchor candidate");
                    scrollViewer.UnregisterAnchorCandidate(rectangleScrollViewerContent);
                    expectedAnchorCandidatesCount = 0;

                    Log.Comment("Forcing Scroller layout");
                    scroller.InvalidateArrange();
                });

                WaitForEvent("Waiting for AnchorRequested event", scrollViewerAnchorRequestedEvent);
            }
        }
        private void SetupDefaultUI(
            ScrollViewer scrollViewer,
            Rectangle rectangleScrollViewerContent   = null,
            AutoResetEvent scrollViewerLoadedEvent   = null,
            AutoResetEvent scrollViewerUnloadedEvent = null,
            bool setAsContentRoot = true)
        {
            Log.Comment("Setting up default UI with ScrollViewer" + (rectangleScrollViewerContent == null ? "" : " and Rectangle"));

            LinearGradientBrush twoColorLGB = new LinearGradientBrush()
            {
                StartPoint = new Point(0, 0), EndPoint = new Point(1, 1)
            };

            GradientStop brownGS = new GradientStop()
            {
                Color = Colors.Brown, Offset = 0.0
            };

            twoColorLGB.GradientStops.Add(brownGS);

            GradientStop orangeGS = new GradientStop()
            {
                Color = Colors.Orange, Offset = 1.0
            };

            twoColorLGB.GradientStops.Add(orangeGS);

            if (rectangleScrollViewerContent != null)
            {
                rectangleScrollViewerContent.Width  = c_defaultUIScrollViewerContentWidth;
                rectangleScrollViewerContent.Height = c_defaultUIScrollViewerContentHeight;
                rectangleScrollViewerContent.Fill   = twoColorLGB;
            }

            Verify.IsNotNull(scrollViewer);
            scrollViewer.Name   = "scrollViewer";
            scrollViewer.Width  = c_defaultUIScrollViewerWidth;
            scrollViewer.Height = c_defaultUIScrollViewerHeight;
            if (rectangleScrollViewerContent != null)
            {
                scrollViewer.Content = rectangleScrollViewerContent;
            }

            if (scrollViewerLoadedEvent != null)
            {
                scrollViewer.Loaded += (object sender, RoutedEventArgs e) =>
                {
                    Log.Comment("Scroller.Loaded event handler");
                    scrollViewerLoadedEvent.Set();
                };
            }

            if (scrollViewerUnloadedEvent != null)
            {
                scrollViewer.Unloaded += (object sender, RoutedEventArgs e) =>
                {
                    Log.Comment("Scroller.Unloaded event handler");
                    scrollViewerUnloadedEvent.Set();
                };
            }

            if (setAsContentRoot)
            {
                Log.Comment("Setting window content");
                MUXControlsTestApp.App.TestContentRoot = scrollViewer;
            }
        }
        private void SetupDefaultUI(
            ScrollViewer scrollViewer,
            Rectangle rectangleScrollViewerContent   = null,
            AutoResetEvent scrollViewerLoadedEvent   = null,
            AutoResetEvent scrollViewerUnloadedEvent = null,
            bool setAsContentRoot = true,
            bool useParentGrid    = false)
        {
            Log.Comment("Setting up default UI with ScrollViewer" + (rectangleScrollViewerContent == null ? "" : " and Rectangle"));

            LinearGradientBrush twoColorLGB = new LinearGradientBrush()
            {
                StartPoint = new Point(0, 0), EndPoint = new Point(1, 1)
            };

            GradientStop brownGS = new GradientStop()
            {
                Color = Colors.Brown, Offset = 0.0
            };

            twoColorLGB.GradientStops.Add(brownGS);

            GradientStop orangeGS = new GradientStop()
            {
                Color = Colors.Orange, Offset = 1.0
            };

            twoColorLGB.GradientStops.Add(orangeGS);

            if (rectangleScrollViewerContent != null)
            {
                rectangleScrollViewerContent.Width  = c_defaultUIScrollViewerContentWidth;
                rectangleScrollViewerContent.Height = c_defaultUIScrollViewerContentHeight;
                rectangleScrollViewerContent.Fill   = twoColorLGB;
            }

            Verify.IsNotNull(scrollViewer);
            scrollViewer.Name   = "scrollViewer";
            scrollViewer.Width  = c_defaultUIScrollViewerWidth;
            scrollViewer.Height = c_defaultUIScrollViewerHeight;
            if (rectangleScrollViewerContent != null)
            {
                scrollViewer.Content = rectangleScrollViewerContent;
            }

            if (scrollViewerLoadedEvent != null)
            {
                scrollViewer.Loaded += (object sender, RoutedEventArgs e) =>
                {
                    Log.Comment("ScrollViewer.Loaded event handler");
                    scrollViewerLoadedEvent.Set();
                };
            }

            if (scrollViewerUnloadedEvent != null)
            {
                scrollViewer.Unloaded += (object sender, RoutedEventArgs e) =>
                {
                    Log.Comment("ScrollViewer.Unloaded event handler");
                    scrollViewerUnloadedEvent.Set();
                };
            }

            Grid parentGrid = null;

            if (useParentGrid)
            {
                parentGrid        = new Grid();
                parentGrid.Width  = c_defaultUIScrollViewerWidth * 3;
                parentGrid.Height = c_defaultUIScrollViewerHeight * 3;

                scrollViewer.HorizontalAlignment = HorizontalAlignment.Left;
                scrollViewer.VerticalAlignment   = VerticalAlignment.Top;

                parentGrid.Children.Add(scrollViewer);
            }

            if (setAsContentRoot)
            {
                Log.Comment("Setting window content");
                if (useParentGrid)
                {
                    Content = parentGrid;
                }
                else
                {
                    Content = scrollViewer;
                }
            }
        }