Пример #1
0
        public void VerifyPropertyValuesAfterTemplateApplication()
        {
            if (PlatformConfiguration.IsOSVersionLessThan(OSVersion.Redstone2))
            {
                Log.Warning("Test is disabled on pre-RS2 because ScrollView not supported pre-RS2");
                return;
            }

            using (PrivateLoggingHelper privateSVLoggingHelper = new PrivateLoggingHelper("ScrollView", "ScrollPresenter"))
            {
                ScrollView     scrollView = null;
                Rectangle      rectangleScrollViewContent = null;
                AutoResetEvent scrollViewLoadedEvent      = new AutoResetEvent(false);
                AutoResetEvent scrollViewUnloadedEvent    = new AutoResetEvent(false);

                RunOnUIThread.Execute(() =>
                {
                    rectangleScrollViewContent = new Rectangle();
                    scrollView = new ScrollView();

                    SetupDefaultUI(scrollView, rectangleScrollViewContent, scrollViewLoadedEvent, scrollViewUnloadedEvent);
                });

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

                RunOnUIThread.Execute(() =>
                {
                    Log.Comment("Verifying ScrollView property values after Loaded event");
                    Verify.AreEqual(scrollView.Content, rectangleScrollViewContent);
                    Verify.IsNotNull(ScrollViewTestHooks.GetScrollPresenterPart(scrollView));
                    Verify.AreEqual(ScrollViewTestHooks.GetScrollPresenterPart(scrollView).Content, rectangleScrollViewContent);
                    Verify.IsNotNull(scrollView.HorizontalScrollController);
                    Verify.IsNotNull(scrollView.VerticalScrollController);
                    Verify.AreEqual(scrollView.ExtentWidth, c_defaultUIScrollViewContentWidth);
                    Verify.AreEqual(scrollView.ExtentHeight, c_defaultUIScrollViewContentHeight);
                    Verify.AreEqual(scrollView.ViewportWidth, c_defaultUIScrollViewWidth);
                    Verify.AreEqual(scrollView.ViewportHeight, c_defaultUIScrollViewHeight);
                    Verify.AreEqual(scrollView.ScrollableWidth, c_defaultUIScrollViewContentWidth - c_defaultUIScrollViewWidth);
                    Verify.AreEqual(scrollView.ScrollableHeight, c_defaultUIScrollViewContentHeight - c_defaultUIScrollViewHeight);

                    Log.Comment("Resetting window content and ScrollView");
                    Content    = null;
                    scrollView = null;
                });

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

                IdleSynchronizer.Wait();
                Log.Comment("Garbage collecting...");
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
                Log.Comment("Done");
            }
        }
        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");
            }
        }
Пример #3
0
        public void AnchoringAtRepeaterMiddle()
        {
            using (ScrollerTestHooksHelper scrollerTestHooksHelper = new ScrollerTestHooksHelper())
            {
                using (PrivateLoggingHelper privateLoggingHelper = new PrivateLoggingHelper("Scroller"))
                {
                    Scroller       scroller                 = null;
                    AutoResetEvent scrollerLoadedEvent      = new AutoResetEvent(false);
                    AutoResetEvent scrollerViewChangedEvent = new AutoResetEvent(false);

                    RunOnUIThread.Execute(() =>
                    {
                        scroller = new Scroller();

                        SetupRepeaterAnchoringUI(scroller, scrollerLoadedEvent);

                        scroller.HorizontalAnchorRatio = double.NaN;
                        scroller.VerticalAnchorRatio   = 0.5;
                    });

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

                    ChangeZoomFactor(scroller, 2.0f, 0.0f, 0.0f, ScrollerViewKind.Absolute, ScrollerViewChangeKind.AllowAnimation);
                    ChangeOffsets(scroller, 0.0, 250.0, ScrollerViewKind.Absolute, ScrollerViewChangeKind.AllowAnimation, ScrollerViewChangeSnapPointRespect.IgnoreSnapPoints, false /*hookViewChanged*/);

                    ItemsRepeater  repeater   = null;
                    TestDataSource dataSource = null;

                    RunOnUIThread.Execute(() =>
                    {
                        repeater   = (scroller.Child as Border).Child as ItemsRepeater;
                        dataSource = repeater.ItemsSource as TestDataSource;

                        scroller.ViewChanged += delegate(Scroller sender, object args) {
                            scrollerViewChangedEvent.Set();
                        };

                        Log.Comment("Inserting items at the beginning");
                        dataSource.Insert(0 /*index*/, 2 /*count*/);
                    });

                    WaitForEvent("Waiting for Scroller.ViewChanged event", scrollerViewChangedEvent);

                    RunOnUIThread.Execute(() =>
                    {
                        Log.Comment("Scroller offset change expected");
                        Verify.AreEqual(scroller.VerticalOffset, 520.0);
                    });

                    RunOnUIThread.Execute(() =>
                    {
                        scrollerViewChangedEvent.Reset();

                        Log.Comment("Removing items from the beginning");
                        dataSource.Remove(0 /*index*/, 2 /*count*/);
                    });

                    WaitForEvent("Waiting for Scroller.ViewChanged event", scrollerViewChangedEvent);

                    RunOnUIThread.Execute(() =>
                    {
                        Log.Comment("Scroller offset change expected");
                        Verify.AreEqual(scroller.VerticalOffset, 250.0);
                    });
                }
            }
        }
        public void AnchoringAtRepeaterMiddle()
        {
            using (ScrollPresenterTestHooksHelper scrollPresenterTestHooksHelper = new ScrollPresenterTestHooksHelper(
                       enableAnchorNotifications: true,
                       enableInteractionSourcesNotifications: true,
                       enableExpressionAnimationStatusNotifications: false))
            {
                using (PrivateLoggingHelper privateLoggingHelper = new PrivateLoggingHelper("ScrollPresenter"))
                {
                    ScrollPresenter scrollPresenter                 = null;
                    AutoResetEvent  scrollPresenterLoadedEvent      = new AutoResetEvent(false);
                    AutoResetEvent  scrollPresenterViewChangedEvent = new AutoResetEvent(false);

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

                        SetupRepeaterAnchoringUI(scrollPresenter, scrollPresenterLoadedEvent);

                        scrollPresenter.HorizontalAnchorRatio = double.NaN;
                        scrollPresenter.VerticalAnchorRatio   = 0.5;
                    });

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

                    ZoomTo(scrollPresenter, 2.0f, 0.0f, 0.0f, ScrollingAnimationMode.Enabled, ScrollingSnapPointsMode.Ignore);
                    ScrollTo(scrollPresenter, 0.0, 250.0, ScrollingAnimationMode.Enabled, ScrollingSnapPointsMode.Ignore, false /*hookViewChanged*/);

                    ItemsRepeater  repeater   = null;
                    TestDataSource dataSource = null;

                    RunOnUIThread.Execute(() =>
                    {
                        repeater   = (scrollPresenter.Content as Border).Child as ItemsRepeater;
                        dataSource = repeater.ItemsSource as TestDataSource;

                        scrollPresenter.ViewChanged += delegate(ScrollPresenter sender, object args) {
                            scrollPresenterViewChangedEvent.Set();
                        };

                        Log.Comment("Inserting items at the beginning");
                        dataSource.Insert(0 /*index*/, 2 /*count*/);
                    });

                    WaitForEvent("Waiting for ScrollPresenter.ViewChanged event", scrollPresenterViewChangedEvent);

                    RunOnUIThread.Execute(() =>
                    {
                        Log.Comment("ScrollPresenter offset change expected");
                        Verify.AreEqual(520.0, scrollPresenter.VerticalOffset);
                    });

                    RunOnUIThread.Execute(() =>
                    {
                        scrollPresenterViewChangedEvent.Reset();

                        Log.Comment("Removing items from the beginning");
                        dataSource.Remove(0 /*index*/, 2 /*count*/);
                    });

                    WaitForEvent("Waiting for ScrollPresenter.ViewChanged event", scrollPresenterViewChangedEvent);

                    RunOnUIThread.Execute(() =>
                    {
                        Log.Comment("ScrollPresenter offset change expected");
                        Verify.AreEqual(250.0, scrollPresenter.VerticalOffset);

                        Log.Comment("ScrollPresenter CurrentAnchor is " + (scrollPresenter.CurrentAnchor == null ? "null" : "non-null"));
                        Verify.IsNotNull(scrollPresenter.CurrentAnchor);
                    });
                }
            }
        }
Пример #5
0
        public void VerifyAnchorCandidateRegistration()
        {
            if (PlatformConfiguration.IsOSVersionLessThan(OSVersion.Redstone2))
            {
                Log.Warning("Test is disabled on pre-RS2 because ScrollView not supported pre-RS2");
                return;
            }

            using (PrivateLoggingHelper privateSVLoggingHelper = new PrivateLoggingHelper("ScrollView", "ScrollPresenter"))
            {
                int             expectedAnchorCandidatesCount = 0;
                ScrollPresenter scrollPresenter                = null;
                ScrollView      scrollView                     = null;
                Rectangle       rectangleScrollViewContent     = null;
                AutoResetEvent  scrollViewLoadedEvent          = new AutoResetEvent(false);
                AutoResetEvent  scrollViewAnchorRequestedEvent = new AutoResetEvent(false);

                RunOnUIThread.Execute(() =>
                {
                    rectangleScrollViewContent = new Rectangle();
                    scrollView = new ScrollView();
                    scrollView.HorizontalAnchorRatio = 0.1;

                    SetupDefaultUI(scrollView, rectangleScrollViewContent, scrollViewLoadedEvent);

                    scrollView.AnchorRequested += (ScrollView sender, ScrollingAnchorRequestedEventArgs args) =>
                    {
                        Log.Comment("ScrollView.AnchorRequested event handler. args.AnchorCandidates.Count: " + args.AnchorCandidates.Count);
                        Verify.IsNull(args.AnchorElement);
                        Verify.AreEqual(expectedAnchorCandidatesCount, args.AnchorCandidates.Count);
                        scrollViewAnchorRequestedEvent.Set();
                    };
                });

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

                RunOnUIThread.Execute(() =>
                {
                    Log.Comment("Accessing inner ScrollPresenter control");
                    scrollPresenter = ScrollViewTestHooks.GetScrollPresenterPart(scrollView);

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

                    Log.Comment("Forcing ScrollPresenter layout");
                    scrollPresenter.InvalidateArrange();
                });

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

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

                    Log.Comment("Forcing ScrollPresenter layout");
                    scrollPresenter.InvalidateArrange();
                });

                WaitForEvent("Waiting for AnchorRequested event", scrollViewAnchorRequestedEvent);
            }
        }
Пример #6
0
        private void VerifyVisualStates(ScrollBarVisibility scrollBarVisibility, bool autoHideScrollControllers)
        {
            using (PrivateLoggingHelper privateSVLoggingHelper = new PrivateLoggingHelper("ScrollView"))
            {
                ScrollView scrollView = null;

                RunOnUIThread.Execute(() =>
                {
                    MUXControlsTestHooks.LoggingMessage += MUXControlsTestHooks_LoggingMessageForVisualStateChange;
                    m_scrollViewVisualStateCounts        = new ScrollViewVisualStateCounts();
                    scrollView = new ScrollView();
                });

                using (ScrollViewTestHooksHelper scrollViewTestHooksHelper = new ScrollViewTestHooksHelper(scrollView, autoHideScrollControllers))
                {
                    Rectangle      rectangleScrollViewContent = null;
                    AutoResetEvent scrollViewLoadedEvent      = new AutoResetEvent(false);
                    AutoResetEvent scrollViewUnloadedEvent    = new AutoResetEvent(false);

                    RunOnUIThread.Execute(() =>
                    {
                        rectangleScrollViewContent = new Rectangle();
                        scrollView.HorizontalScrollBarVisibility = scrollBarVisibility;
                        scrollView.VerticalScrollBarVisibility   = scrollBarVisibility;

                        SetupDefaultUI(
                            scrollView: scrollView,
                            rectangleScrollViewContent: rectangleScrollViewContent,
                            scrollViewLoadedEvent: scrollViewLoadedEvent,
                            scrollViewUnloadedEvent: scrollViewUnloadedEvent,
                            setAsContentRoot: true,
                            useParentGrid: true);
                    });

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

                    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_scrollViewVisualStateCounts.ResetStateCounts();
                        MUXControlsTestHooks.LoggingMessage += MUXControlsTestHooks_LoggingMessageForVisualStateChange;

                        Log.Comment("Disabling ScrollView");
                        scrollView.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_scrollViewVisualStateCounts.ResetStateCounts();
                        MUXControlsTestHooks.LoggingMessage += MUXControlsTestHooks_LoggingMessageForVisualStateChange;

                        Log.Comment("Enabling ScrollView");
                        scrollView.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");
                        Content = null;
                        m_scrollViewVisualStateCounts = null;
                    });

                    WaitForEvent("Waiting for Unloaded event", scrollViewUnloadedEvent);
                }
            }
        }
Пример #7
0
        public void VerifyScrollPresenterAttachedProperties()
        {
            if (PlatformConfiguration.IsOSVersionLessThan(OSVersion.Redstone2))
            {
                Log.Warning("Test is disabled on pre-RS2 because ScrollView not supported pre-RS2");
                return;
            }

            using (PrivateLoggingHelper privateSVLoggingHelper = new PrivateLoggingHelper("ScrollView", "ScrollPresenter"))
            {
                ScrollView     scrollView = null;
                Rectangle      rectangleScrollViewContent = null;
                AutoResetEvent scrollViewLoadedEvent      = new AutoResetEvent(false);
                AutoResetEvent scrollViewUnloadedEvent    = new AutoResetEvent(false);

                RunOnUIThread.Execute(() =>
                {
                    rectangleScrollViewContent = new Rectangle();
                    scrollView = new ScrollView();

                    SetupDefaultUI(scrollView, rectangleScrollViewContent, scrollViewLoadedEvent, scrollViewUnloadedEvent);
                });

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

                RunOnUIThread.Execute(() =>
                {
                    Log.Comment("Setting ScrollPresenter-cloned properties to non-default values");
                    scrollView.IgnoredInputKind             = InputKind.MouseWheel | InputKind.Pen;
                    scrollView.ContentOrientation           = ContentOrientation.Horizontal;
                    scrollView.HorizontalScrollChainingMode = ChainingMode.Always;
                    scrollView.VerticalScrollChainingMode   = ChainingMode.Never;
                    scrollView.HorizontalScrollRailingMode  = RailingMode.Disabled;
                    scrollView.VerticalScrollRailingMode    = RailingMode.Disabled;
                    scrollView.HorizontalScrollMode         = ScrollMode.Enabled;
                    scrollView.VerticalScrollMode           = ScrollMode.Disabled;
                    scrollView.ZoomMode         = ZoomMode.Enabled;
                    scrollView.ZoomChainingMode = ChainingMode.Never;
                    scrollView.MinZoomFactor    = 2.0;
                    scrollView.MaxZoomFactor    = 8.0;

                    Log.Comment("Verifying ScrollPresenter-cloned non-default properties");
                    Verify.AreEqual(scrollView.IgnoredInputKind, InputKind.MouseWheel | InputKind.Pen);
                    Verify.AreEqual(scrollView.ContentOrientation, ContentOrientation.Horizontal);
                    Verify.AreEqual(scrollView.HorizontalScrollChainingMode, ChainingMode.Always);
                    Verify.AreEqual(scrollView.VerticalScrollChainingMode, ChainingMode.Never);
                    Verify.AreEqual(scrollView.HorizontalScrollRailingMode, RailingMode.Disabled);
                    Verify.AreEqual(scrollView.VerticalScrollRailingMode, RailingMode.Disabled);
                    Verify.AreEqual(scrollView.HorizontalScrollMode, ScrollMode.Enabled);
                    Verify.AreEqual(scrollView.VerticalScrollMode, ScrollMode.Disabled);
#if USE_SCROLLMODE_AUTO
                    Verify.AreEqual(scrollView.ComputedHorizontalScrollMode, ScrollMode.Enabled);
                    Verify.AreEqual(scrollView.ComputedVerticalScrollMode, ScrollMode.Disabled);
#endif
                    Verify.AreEqual(scrollView.ZoomMode, ZoomMode.Enabled);
                    Verify.AreEqual(scrollView.ZoomChainingMode, ChainingMode.Never);
                    Verify.IsGreaterThan(scrollView.MinZoomFactor, 2.0 - c_epsilon);
                    Verify.IsLessThan(scrollView.MinZoomFactor, 2.0 + c_epsilon);
                    Verify.IsGreaterThan(scrollView.MaxZoomFactor, 8.0 - c_epsilon);
                    Verify.IsLessThan(scrollView.MaxZoomFactor, 8.0 + c_epsilon);

                    Log.Comment("Resetting window content and ScrollView");
                    Content    = null;
                    scrollView = null;
                });

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

                IdleSynchronizer.Wait();
                Log.Comment("Garbage collecting...");
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
                Log.Comment("Done");
            }
        }