Exemplo n.º 1
0
        public void ArrangeWhenMeasureChangedTest()
        {
            TestTaskScheduler scheduler = (TestTaskScheduler)ApplicationHost.Current.TaskScheduler;

            using (scheduler.DisableImmediateProcessing())
            {
                TestElement element = new TestElement
                {
                    MeasureSize = new Size(100, 100),
                    ArrangeSize = new Size(100, 100),
                };

                element.IsRootElement = true;

                element.Measure(new Size(100, 100));
                element.Arrange(new Rect(0, 0, 100, 100));
                Assert.AreEqual(1, element.MeasureCount);
                Assert.AreEqual(1, element.ArrangeCount);

                element.InvalidateMeasure();
                scheduler.ProcessDueOperations();
                Assert.AreEqual(2, element.MeasureCount);
                Assert.AreEqual(1, element.ArrangeCount);

                element.MeasureSize = new Size(150, 150);
                element.InvalidateMeasure();
                scheduler.ProcessDueOperations();
                Assert.AreEqual(3, element.MeasureCount);
                Assert.AreEqual(2, element.ArrangeCount);
            }
        }
Exemplo n.º 2
0
        public void MeasureInvisibleOnceOnlyTest()
        {
            TestTaskScheduler scheduler = (TestTaskScheduler)ApplicationHost.Current.TaskScheduler;

            using (scheduler.DisableImmediateProcessing())
            {
                TestElement child = new TestElement {
                    MeasureSize = new Size(100, 100), ArrangeSize = new Size(100, 100)
                };

                TestContainer parent = new TestContainer {
                    IsRootElement = true
                };
                parent.Child = child;

                parent.Measure(Size.Infinity);
                parent.Arrange(new Rect(parent.DesiredSize));

                Assert.AreEqual(1, parent.MeasureCount);
                Assert.AreEqual(1, parent.ArrangeCount);
                Assert.AreEqual(1, child.MeasureCount);
                Assert.AreEqual(1, child.ArrangeCount);
                Assert.AreEqual(new Size(100, 100), child.DesiredSize);
                Assert.AreEqual(new Size(100, 100), parent.DesiredSize);

                child.Visibility = Visibility.Collapsed;

                scheduler.ProcessDueOperations();

                Assert.AreEqual(2, parent.MeasureCount);
                Assert.AreEqual(2, parent.ArrangeCount);
                Assert.AreEqual(1, child.MeasureCount);
                Assert.AreEqual(1, child.ArrangeCount);
                Assert.AreEqual(Size.Zero, child.DesiredSize);
                Assert.AreEqual(Size.Zero, parent.DesiredSize);

                child.InvalidateMeasure();
                child.InvalidateArrange();

                scheduler.ProcessDueOperations();

                Assert.AreEqual(2, parent.MeasureCount);
                Assert.AreEqual(2, parent.ArrangeCount);
                Assert.AreEqual(1, child.MeasureCount);
                Assert.AreEqual(1, child.ArrangeCount);

                parent.InvalidateMeasure();
                parent.InvalidateArrange();

                scheduler.ProcessDueOperations();

                Assert.AreEqual(3, parent.MeasureCount);
                Assert.AreEqual(3, parent.ArrangeCount);
                Assert.AreEqual(1, child.MeasureCount);
                Assert.AreEqual(1, child.ArrangeCount);
            }
        }
Exemplo n.º 3
0
        public void MeasureVisibleOnlyTest()
        {
            TestTaskScheduler scheduler = (TestTaskScheduler)ApplicationHost.Current.TaskScheduler;

            using (scheduler.DisableImmediateProcessing())
            {
                TestElement child = new TestElement();

                TestContainer parent = new TestContainer();
                parent.Child = child;

                parent.InvalidateMeasure();
                parent.InvalidateArrange();
                child.InvalidateMeasure();
                child.InvalidateArrange();

                scheduler.ProcessDueOperations();

                Assert.AreEqual(0, parent.MeasureCount);
                Assert.AreEqual(0, parent.ArrangeCount);
                Assert.AreEqual(0, child.MeasureCount);
                Assert.AreEqual(0, child.ArrangeCount);

                Assert.IsFalse(parent.IsMeasureValid);
                Assert.IsFalse(parent.IsArrangeValid);
                Assert.IsFalse(child.IsMeasureValid);
                Assert.IsFalse(child.IsArrangeValid);
            }
        }
Exemplo n.º 4
0
        public void MeasureParentOnceTest()
        {
            TestTaskScheduler scheduler = (TestTaskScheduler)ApplicationHost.Current.TaskScheduler;

            using (scheduler.DisableImmediateProcessing())
            {
                TestContainer parent = new TestContainer();

                TestElement child = new TestElement
                {
                    MeasureSize = new Size(100, 100),
                    ArrangeSize = new Size(100, 100),
                };

                parent.IsRootElement = true;
                parent.Child         = child;

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

                scheduler.ProcessDueOperations();

                Assert.AreEqual(1, parent.MeasureCount);
                Assert.AreEqual(1, parent.ArrangeCount);
                Assert.AreEqual(1, child.MeasureCount);
                Assert.AreEqual(1, child.ArrangeCount);

                Assert.IsTrue(parent.IsMeasureValid);
                Assert.IsTrue(parent.IsArrangeValid);
                Assert.IsTrue(child.IsMeasureValid);
                Assert.IsTrue(child.IsArrangeValid);
            }
        }
Exemplo n.º 5
0
        public void LayoutInvalidationTest()
        {
            TestTaskScheduler scheduler = (TestTaskScheduler)ApplicationHost.Current.TaskScheduler;

            using (scheduler.DisableImmediateProcessing())
            {
                UIElement root = new UIElement {
                    IsRootElement = true
                };
                UIElement child = new UIElement();

                root.Measure(Size.Infinity);
                root.Arrange(new Rect(root.DesiredSize));

                Assert.IsTrue(root.IsMeasureValid);
                Assert.IsTrue(root.IsArrangeValid);

                root.AddVisualChild(child);

                Assert.IsFalse(root.IsMeasureValid);
                Assert.IsTrue(root.IsArrangeValid);

                scheduler.ProcessDueOperations();

                Assert.IsTrue(root.IsMeasureValid);
                Assert.IsTrue(root.IsArrangeValid);

                root.RemoveVisualChild(child);

                Assert.IsFalse(root.IsMeasureValid);
                Assert.IsTrue(root.IsArrangeValid);

                scheduler.ProcessDueOperations();

                Assert.IsTrue(root.IsMeasureValid);
                Assert.IsTrue(root.IsArrangeValid);
            }
        }