public void ScrollOffsetChangesDiscarded()
        {
            // Offset changes are ignored when the presenter is non-scrollable
            var child = ContentControlWithChild(200, 200);
            ScrollContentPresenter presenter = new ScrollContentPresenter {
                Content = child,
                Width   = 100,
                Height  = 100,
                CanHorizontallyScroll = true,
                CanVerticallyScroll   = true,
                ScrollOwner           = new ScrollViewer()
            };

            presenter.SetHorizontalOffset(50);
            presenter.SetVerticalOffset(60);

            presenter.CanHorizontallyScroll = false;
            presenter.CanVerticallyScroll   = false;

            presenter.SetHorizontalOffset(20);
            presenter.SetVerticalOffset(30);

            presenter.CanHorizontallyScroll = true;
            presenter.CanVerticallyScroll   = true;

            presenter.Measure(new Size(100, 100));
            presenter.Arrange(new Rect(0, 0, 100, 100));

            Assert.AreEqual(50, presenter.HorizontalOffset, "#1");
            Assert.AreEqual(60, presenter.VerticalOffset, "#2");
        }
        void ForceScrollOffsetCore(Point offset, Point expectedOffset, Rect expectedSlot, bool scrollable)
        {
            var          child  = ContentControlWithChild(200, 200);
            ScrollViewer viewer = new ScrollViewer {
                HorizontalScrollBarVisibility = scrollable ? ScrollBarVisibility.Visible : ScrollBarVisibility.Disabled,
                VerticalScrollBarVisibility   = scrollable ? ScrollBarVisibility.Visible : ScrollBarVisibility.Disabled,
                Content = child,
            };

            CreateAsyncTest(viewer, () => {
                ScrollContentPresenter presenter = viewer.FindFirstChild <ScrollContentPresenter> ();
                presenter.Width  = 100;
                presenter.Height = 100;

                presenter.SetHorizontalOffset(offset.X);
                presenter.SetVerticalOffset(offset.Y);
            }, () => {
                ScrollContentPresenter presenter = viewer.FindFirstChild <ScrollContentPresenter> ();

                Assert.AreEqual(expectedOffset.X, presenter.HorizontalOffset, "#1");
                Assert.AreEqual(expectedOffset.Y, presenter.VerticalOffset, "#2");

                Assert.AreEqual(expectedSlot, LayoutInformation.GetLayoutSlot(child), "#3");
            });
        }
        public void ScrollOffsetsAreCached2()
        {
            var child = ContentControlWithChild(200, 200);
            ScrollContentPresenter presenter = new ScrollContentPresenter {
                Content = child,
                Width   = 100,
                Height  = 100,
                CanHorizontallyScroll = true,
                CanVerticallyScroll   = true,
                ScrollOwner           = new ScrollViewer()
            };

            presenter.Measure(new Size(100, 100));

            presenter.SetHorizontalOffset(50);
            presenter.SetVerticalOffset(50);

            presenter.Arrange(new Rect(0, 0, 100, 100));

            Assert.AreEqual(50, presenter.HorizontalOffset, "#3");
            Assert.AreEqual(50, presenter.VerticalOffset, "#4");
        }
        public void ScrollOffsetsAreCached2_NonScrollable()
        {
            // The offsets are ignored when the presenter is non-scrollable
            var child = ContentControlWithChild(200, 200);
            ScrollContentPresenter presenter = new ScrollContentPresenter {
                Content = child,
                Width   = 100,
                Height  = 100,
                CanHorizontallyScroll = false,
                CanVerticallyScroll   = false,
                ScrollOwner           = new ScrollViewer()
            };

            presenter.Measure(new Size(100, 100));

            presenter.SetHorizontalOffset(50);
            presenter.SetVerticalOffset(50);

            presenter.Arrange(new Rect(0, 0, 100, 100));

            Assert.AreEqual(0, presenter.HorizontalOffset, "#3");
            Assert.AreEqual(0, presenter.VerticalOffset, "#4");
        }