public void SizeDistributionOrder() { MyGrid grid = new MyGrid(); grid.AddRows(Auto, Star, Auto); grid.AddColumns(Star, Auto, Star); // Auto/Auto grid.AddChild(ContentControlWithChild(), 0, 1, 1, 1); // Star/Auto grid.AddChild(ContentControlWithChild(), 1, 1, 1, 1); // If there is no spanning involved, the heights do not get distributed grid.Measure(new Size(200, 200)); grid.CheckMeasureOrder("#1", 0, 1); grid.CheckMeasureArgs("#2", Infinity, new Size(inf, 150)); // Span the Star/Auto down into the Auto/Auto segment too. grid.ChangeRowSpan(1, 2); grid.ResetAndInvalidate(); grid.Measure(new Size(200, 200)); grid.CheckMeasureOrder("#3", 0, 1); grid.CheckMeasureArgs("#4", Infinity, new Size(inf, 150)); // Add in an Auto/Star to see what happens grid.AddChild(ContentControlWithChild(), 2, 0, 1, 1); grid.ResetAndInvalidate(); grid.Measure(new Size(200, 200)); grid.CheckMeasureOrder("#5", 0, 1, 2, 1); grid.CheckMeasureArgs("#6", Infinity, new Size(inf, inf), new Size(75, inf), new Size(inf, 150)); }
public void SizeDistributionOrder () { MyGrid grid = new MyGrid (); grid.AddRows (Auto, Star, Auto); grid.AddColumns (Star, Auto, Star); // Auto/Auto grid.AddChild (ContentControlWithChild (), 0, 1, 1, 1); // Star/Auto grid.AddChild (ContentControlWithChild (), 1, 1, 1, 1); // If there is no spanning involved, the heights do not get distributed grid.Measure (new Size (200, 200)); grid.CheckMeasureOrder ("#1", 0, 1); grid.CheckMeasureArgs ("#2", Infinity, new Size (inf, 150)); // Span the Star/Auto down into the Auto/Auto segment too. grid.ChangeRowSpan (1, 2); grid.ResetAndInvalidate (); grid.Measure (new Size (200, 200)); grid.CheckMeasureOrder ("#3", 0, 1); grid.CheckMeasureArgs ("#4", Infinity, new Size (inf, 150)); // Add in an Auto/Star to see what happens grid.AddChild (ContentControlWithChild (), 2, 0, 1, 1); grid.ResetAndInvalidate (); grid.Measure (new Size (200, 200)); grid.CheckMeasureOrder ("#5", 0, 1, 2, 1); grid.CheckMeasureArgs ("#6", Infinity, new Size (inf, inf), new Size (75, inf), new Size (inf, 150)); }
public void ChildMargin_constWidth_constHeight_singleCell() { MyGrid g = new MyGrid(); RowDefinition rdef; ColumnDefinition cdef; rdef = new RowDefinition(); rdef.Height = new GridLength(200); g.RowDefinitions.Add(rdef); cdef = new ColumnDefinition(); cdef.Width = new GridLength(200); g.ColumnDefinitions.Add(cdef); g.Margin = new Thickness(5); Canvas c = new Canvas(); Grid.SetRow(c, 0); Grid.SetColumn(c, 0); g.Children.Add(new MyContentControl { Content = c }); // first test with the child sized larger than the row/column definitions c.Width = 400; c.Height = 400; g.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity)); g.CheckMeasureArgs("#MeasureOverrideArgs", new Size(200, 200)); g.Reset(); Assert.AreEqual(new Size(200, 200), c.DesiredSize, "DesiredSize0"); Assert.AreEqual(new Size(210, 210), g.DesiredSize, "DesiredSize1"); g.Measure(new Size(100, 100)); g.CheckMeasureArgs("#MeasureOverrideArgs 2"); // MeasureOverride shouldn't be called. g.Reset(); Assert.AreEqual(new Size(100, 100), g.DesiredSize, "DesiredSize2"); // now test with the child sized smaller than the row/column definitions c.Width = 100; c.Height = 100; g.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity)); g.CheckMeasureArgs("#MeasureOverrideArgs 3", new Size(200, 200)); g.Reset(); Assert.AreEqual(new Size(210, 210), g.DesiredSize, "DesiredSize3"); g.Measure(new Size(100, 100)); g.CheckMeasureArgs("#MeasureOverrideArgs 4"); // MeasureOverride won't be called. g.Reset(); Assert.AreEqual(new Size(100, 100), g.DesiredSize, "DesiredSize4"); }
public void TwoChildrenMargin_2Columns_1Star_and_2Star_1Row_constSize() { MyGrid g = new MyGrid(); RowDefinition rdef; ColumnDefinition cdef; rdef = new RowDefinition(); rdef.Height = new GridLength(200); g.RowDefinitions.Add(rdef); cdef = new ColumnDefinition(); cdef.Width = new GridLength(1, GridUnitType.Star); g.ColumnDefinitions.Add(cdef); cdef = new ColumnDefinition(); cdef.Width = new GridLength(2, GridUnitType.Star); g.ColumnDefinitions.Add(cdef); g.Margin = new Thickness(5); Canvas c; MyContentControl mc; c = new Canvas(); c.Width = 400; c.Height = 400; mc = new MyContentControl { Content = c }; Grid.SetRow(mc, 0); Grid.SetColumn(mc, 0); g.Children.Add(mc); c = new Canvas(); c.Width = 400; c.Height = 400; mc = new MyContentControl { Content = c }; Grid.SetRow(mc, 0); Grid.SetColumn(mc, 1); g.Children.Add(mc); g.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity)); g.CheckMeasureArgs("#MeasureOverrideArg", new Size(inf, 200), new Size(inf, 200)); g.Reset(); Assert.AreEqual(new Size(810, 210), g.DesiredSize, "DesiredSize"); g.Measure(new Size(100, 100)); g.CheckMeasureArgs("#MeasureOverrideArg 2", new Size(30, 200), new Size(60, 200)); g.Reset(); Assert.AreEqual(new Size(100, 100), g.DesiredSize, "DesiredSize"); }
public void ChildMargin_autoWidth_autoHeight_singleCell() { MyGrid g = new MyGrid(); RowDefinition rdef; ColumnDefinition cdef; rdef = new RowDefinition(); rdef.Height = GridLength.Auto; g.RowDefinitions.Add(rdef); cdef = new ColumnDefinition(); cdef.Width = GridLength.Auto; g.ColumnDefinitions.Add(cdef); g.Margin = new Thickness(5); Canvas c = new Canvas(); Grid.SetRow(c, 0); Grid.SetColumn(c, 0); g.Children.Add(new MyContentControl { Content = c }); // first test with the child sized larger than the row/column definitions c.Width = 400; c.Height = 400; g.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity)); g.CheckMeasureArgs("#MeasureOverrideArg", new Size(inf, inf)); g.Reset(); Assert.AreEqual(new Size(410, 410), g.DesiredSize, "DesiredSize"); g.Measure(new Size(100, 100)); g.CheckMeasureArgs("#MeasureOverrideArg 2"); // MeasureOverride is not called g.Reset(); Assert.AreEqual(new Size(100, 100), g.DesiredSize, "DesiredSize"); // now test with the child sized smaller than the row/column definitions c.Width = 100; c.Height = 100; g.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity)); g.CheckMeasureArgs("#MeasureOverrideArg 3", new Size(inf, inf)); g.Reset(); Assert.AreEqual(new Size(110, 110), g.DesiredSize, "DesiredSize"); g.Measure(new Size(100, 100)); g.CheckMeasureArgs("#MeasureOverrideArg 4"); // MeasureOverride is not called g.Reset(); Assert.AreEqual(new Size(100, 100), g.DesiredSize, "DesiredSize"); }
public void ArrangeDefaultDefinitions() { MyGrid grid = new MyGrid(); Border b = new Border(); b.Background = new SolidColorBrush(Colors.Red); Border b2 = new Border(); b2.Background = new SolidColorBrush(Colors.Green); b2.Width = b2.Height = 50; grid.Children.Add(new MyContentControl { Content = b }); grid.Children.Add(new MyContentControl { Content = b2 }); grid.Measure(new Size(inf, inf)); grid.CheckMeasureArgs("#MeasureOverrideArg", new Size(inf, inf), new Size(inf, inf)); grid.Reset(); grid.Measure(new Size(400, 300)); grid.CheckMeasureArgs("#MeasureOverrideArg 2", new Size(400, 300), new Size(400, 300)); grid.Reset(); grid.Width = 100; grid.Height = 100; grid.Measure(new Size(400, 300)); grid.CheckMeasureArgs("#MeasureOverrideArg 3", new Size(100, 100), new Size(100, 100)); grid.Reset(); grid.Arrange(new Rect(0, 0, grid.DesiredSize.Width, grid.DesiredSize.Height)); Assert.AreEqual(new Size(100, 100), grid.RenderSize, "grid render"); Assert.AreEqual(new Size(100, 100), b.RenderSize, "b render"); Assert.AreEqual(new Size(50, 50), b2.RenderSize, "b2 render"); }
public void ArrangeTest() { MyGrid g = new MyGrid(); RowDefinition rdef; ColumnDefinition cdef; rdef = new RowDefinition(); rdef.Height = new GridLength(50); g.RowDefinitions.Add(rdef); cdef = new ColumnDefinition(); cdef.Width = new GridLength(100); g.ColumnDefinitions.Add(cdef); g.Margin = new Thickness(5); var r = new Border(); MyContentControl mc = new MyContentControl { Content = r }; Grid.SetRow(mc, 0); Grid.SetColumn(mc, 0); g.Children.Add(mc); g.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity)); g.CheckMeasureArgs("#MeasureOverrideArg", new Size(100, 50)); g.Reset(); Assert.AreEqual(new Size(0, 0), new Size(r.ActualWidth, r.ActualHeight), "r actual after measure"); Assert.AreEqual(new Size(0, 0), new Size(g.ActualWidth, g.ActualHeight), "g actual after measure"); g.Arrange(new Rect(0, 0, g.DesiredSize.Width, g.DesiredSize.Height)); g.CheckRowHeights("#RowHeights", 50); Assert.AreEqual(new Size(0, 0), r.DesiredSize, "r desired 0"); Assert.AreEqual(new Size(110, 60), g.DesiredSize, "g desired 1"); Assert.AreEqual(new Rect(0, 0, 100, 50).ToString(), LayoutInformation.GetLayoutSlot(r).ToString(), "slot"); Assert.AreEqual(new Size(100, 50), new Size(r.ActualWidth, r.ActualHeight), "r actual after arrange"); Assert.AreEqual(new Size(100, 50), new Size(g.ActualWidth, g.ActualHeight), "g actual after arrange"); }
public void MeasureAutoRows2 () { double inf = double.PositiveInfinity; MyGrid grid = new MyGrid (); grid.AddColumns (new GridLength (50), new GridLength (50)); grid.AddRows (GridLength.Auto, GridLength.Auto, GridLength.Auto); MyContentControl c = new MyContentControl (50, 50); grid.AddChild (c, 0, 0, 2, 1); grid.AddChild (new MyContentControl (50, 60), 0, 1, 1, 1); grid.AddChild (new MyContentControl (50, 20), 0, 1, 1, 1); grid.Measure (new Size (500, 400)); grid.CheckMeasureArgs ("#1", new Size (50, inf), new Size (50, inf), new Size (50, inf)); grid.CheckMeasureOrder ("#2", 0, 1, 2); Assert.AreEqual (new Size (100, 60), grid.DesiredSize, "#2"); grid.ChangeRow (2, 1); grid.Reset (); grid.Measure (new Size (500, 400)); grid.CheckMeasureArgs ("#3", new Size (50, inf)); grid.CheckMeasureOrder ("#4", 2); Assert.AreEqual (new Size (100, 80), grid.DesiredSize, "#4"); grid.InvalidateSubtree (); ((FrameworkElement) c.Content).Height = 100; grid.Reset (); grid.Measure (new Size (500, 400)); grid.CheckMeasureArgs ("#5", new Size (50, inf), new Size (50, inf), new Size (50, inf)); Assert.AreEqual (new Size (100, 100), grid.DesiredSize, "#6"); grid.Reset (); grid.ChangeRow (2, 2); grid.Measure (new Size (500, 400)); grid.CheckMeasureArgs ("#7", new Size (50, inf)); grid.CheckMeasureOrder ("#8", 2); Assert.AreEqual (new Size (100, 120), grid.DesiredSize, "#8"); }
public void MeasureAutoRows () { MyGrid grid = new MyGrid (); grid.AddColumns (new GridLength (50), new GridLength (50)); grid.AddRows (GridLength.Auto, GridLength.Auto, GridLength.Auto); grid.AddChild (new MyContentControl (50, 50), 0, 0, 2, 1); grid.AddChild (new MyContentControl (50, 60), 0, 1, 1, 1); grid.Measure (new Size (0, 0)); grid.CheckMeasureArgs ("#1", new Size (50, inf), new Size (50, inf)); grid.Reset (); Assert.AreEqual (new Size (0, 0), grid.DesiredSize, "#2"); grid.Measure (new Size (50, 40)); grid.CheckMeasureSizes ("#3", new Size (50, inf), new Size (50, inf)); grid.Reset (); Assert.AreEqual (new Size (50, 40), grid.DesiredSize, "#4"); grid.Measure (new Size (500, 400)); grid.CheckMeasureSizes ("#5", new Size (50, inf), new Size (50, inf)); grid.Reset (); Assert.AreEqual (new Size (100, 60), grid.DesiredSize, "#6"); }
public void ChildInvalidatesGrid3 () { var child = new MyContentControl (50, 50); MyGrid grid = new MyGrid (); grid.Children.Add (child); grid.Measure (new Size (100, 100)); Assert.AreEqual (1, grid.MeasuredElements.Count, "#1"); // Note that invalidating the measure of the content does // not invalidate the grid. ((FrameworkElement) child.Content).InvalidateMeasure (); grid.Measure (new Size (100, 100)); Assert.AreEqual (1, grid.MeasuredElements.Count, "#2"); }
public void ChildInvalidatesGrid2 () { var child = new MyContentControl (50, 50); MyGrid grid = new MyGrid (); grid.Children.Add (child); grid.Measure (new Size (100, 100)); Assert.AreEqual (1, grid.MeasuredElements.Count, "#1"); child.InvalidateMeasure (); grid.Measure (new Size (100, 100)); Assert.AreEqual (2, grid.MeasuredElements.Count, "#2"); }
public void AutoStarPriority() { // Test a bunch of combinations of auto/star with/without span to see // which order things are measured in. MyGrid grid = new MyGrid { Width = 200, Height = 200 }; grid.AddRows(Auto, Auto, Star, Auto, Star); grid.AddColumns(Auto, Star, Auto, Star, Auto); // Two auto-autos and one star-star grid.AddChild(ContentControlWithChild(), 0, 0, 1, 1); grid.AddChild(ContentControlWithChild(), 0, 0, 1, 1); grid.AddChild(ContentControlWithChild(), 4, 3, 1, 1); // Measured in-order. star-star is last. grid.ResetAndInvalidate(); grid.Measure(new Size(200, 200)); grid.CheckMeasureOrder("#1", 0, 1, 2); grid.CheckMeasureArgs("#1b", Infinity, Infinity, new Size(75, 75)); grid.ReverseChildren(); grid.ResetAndInvalidate(); grid.Measure(new Size(200, 200)); grid.CheckMeasureOrder("#2", 1, 2, 0); grid.CheckMeasureArgs("#2b", Infinity, Infinity, new Size(75, 75)); // Span > 1 does not affect measure order. star-star is last. grid.ReverseChildren(); grid.ChangeRowSpan(0, 2); grid.ResetAndInvalidate(); grid.Measure(new Size(200, 200)); grid.CheckMeasureOrder("#3", 0, 1, 2); grid.CheckMeasureArgs("#3b", Infinity, Infinity, new Size(75, 75)); grid.ReverseChildren(); grid.ResetAndInvalidate(); grid.Measure(new Size(200, 200)); grid.CheckMeasureOrder("#4", 1, 2, 0); grid.CheckMeasureArgs("#4b", Infinity, Infinity, new Size(75, 75)); // Elements which do not span a star row are measured first. star-star is last. grid.ReverseChildren(); grid.ChangeRowSpan(0, 3); grid.ResetAndInvalidate(); grid.Measure(new Size(200, 200)); grid.CheckMeasureOrder("#5", 1, 0, 2); grid.CheckMeasureArgs("#5b", Infinity, new Size(inf, 125), new Size(75, 75)); grid.ReverseChildren(); grid.ResetAndInvalidate(); grid.Measure(new Size(200, 200)); grid.CheckMeasureOrder("#6", 1, 2, 0); grid.CheckMeasureArgs("#6b", Infinity, new Size(inf, 125), new Size(75, 75)); // Elements which do not span a star col are measured first. star-star is last. grid.ReverseChildren(); grid.ChangeRowSpan(0, 1); grid.ChangeColSpan(0, 2); grid.ResetAndInvalidate(); grid.Measure(new Size(200, 200)); grid.CheckMeasureOrder("#7", 1, 0, 2); grid.CheckMeasureArgs("#7b", Infinity, new Size(125, inf), new Size(75, 75)); grid.ReverseChildren(); grid.ResetAndInvalidate(); grid.Measure(new Size(200, 200)); grid.CheckMeasureOrder("#8", 1, 2, 0); grid.CheckMeasureArgs("#8b", Infinity, new Size(125, inf), new Size(75, 75)); // Elements which span a Star row are measured before ones spanning a Star col. star-star is last. grid.ReverseChildren(); grid.ChangeRowSpan(1, 3); grid.ResetAndInvalidate(); grid.Measure(new Size(200, 200)); grid.CheckMeasureOrder("#9", 1, 0, 1, 2); grid.CheckMeasureArgs("#9b", Infinity, new Size(125, inf), new Size(inf, 125), new Size(75, 75)); grid.ReverseChildren(); grid.ResetAndInvalidate(); grid.Measure(new Size(200, 200)); grid.CheckMeasureOrder("#10", 1, 2, 1, 0); grid.CheckMeasureArgs("#10b", Infinity, new Size(125, inf), new Size(inf, 125), new Size(75, 75)); // Auto/Auto is measured before all. star-star is last. grid.ReverseChildren(); grid.AddChild(ContentControlWithChild(), 0, 0, 1, 1); grid.ResetAndInvalidate(); grid.Measure(new Size(200, 200)); grid.CheckMeasureOrder("#11", 3, 1, 0, 1, 2); grid.CheckMeasureArgs("#11b", Infinity, Infinity, new Size(125, inf), new Size(inf, 125), new Size(75, 75)); grid.ReverseChildren(); grid.ResetAndInvalidate(); grid.Measure(new Size(200, 200)); grid.CheckMeasureOrder("#12", 0, 2, 3, 2, 1); grid.CheckMeasureArgs("#12b", Infinity, Infinity, new Size(125, inf), new Size(inf, 125), new Size(75, 75)); }
public void StarRows5 () { GridLength oneStar = new GridLength (1, GridUnitType.Star); MyGrid grid = new MyGrid { HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center }; grid.AddRows (oneStar, oneStar, oneStar); grid.AddColumns (oneStar, oneStar, oneStar); grid.AddChild (new MyContentControl (240, 240), 0, 0, 3, 3); grid.AddChild (new MyContentControl (150, 150), 0, 0, 1, 1); TestPanel.Children.Add (grid); grid.Measure (new Size (240, 240)); grid.Arrange (new Rect (0, 0, 120, 120)); grid.CheckRowHeights ("#1", 80, 80, 80); grid.CheckMeasureArgs ("#2", new Size (240, 240), new Size (80, 80)); grid.CheckMeasureResult ("#3", new Size (240, 240), new Size (80, 80)); grid.CheckDesired ("#4", new Size (240, 240), new Size (80, 80)); grid.CheckMeasureOrder ("#5", 0, 1); }
public void StarAutoConstrainedGrid2 () { MyGrid g = new MyGrid { Width = 170, Height = 170 }; g.AddRows (GridLength.Auto, new GridLength (1, GridUnitType.Star)); g.AddColumns (GridLength.Auto, new GridLength (1, GridUnitType.Star)); g.AddChild (ContentControlWithChild (), 0, 1, 1, 1); g.AddChild (ContentControlWithChild (), 1, 0, 1, 1); g.AddChild (ContentControlWithChild (), 1, 1, 1, 1); g.AddChild (ContentControlWithChild (), 0, 0, 1, 1); foreach (MyContentControl child in g.Children) { Assert.AreEqual (0, child.ActualHeight, "height"); Assert.AreEqual (0, child.ActualWidth, "height"); Rectangle content = (Rectangle)child.Content; Assert.AreEqual (50, content.ActualHeight, "content height"); Assert.AreEqual (50, content.ActualWidth, "content width"); } g.Measure (new Size (170, 170)); g.CheckFinalMeasureArg ("#1", new Size (120, inf), new Size (inf, 120), new Size (120, 120), new Size (inf, inf)); }
public void ComplexLayout1() { MyGrid g = new MyGrid(); RowDefinition rdef; ColumnDefinition cdef; // Add rows rdef = new RowDefinition(); rdef.Height = new GridLength(200); g.RowDefinitions.Add(rdef); rdef = new RowDefinition(); rdef.Height = new GridLength(200); g.RowDefinitions.Add(rdef); cdef = new ColumnDefinition(); cdef.Width = GridLength.Auto; g.ColumnDefinitions.Add(cdef); cdef = new ColumnDefinition(); cdef.Width = GridLength.Auto; g.ColumnDefinitions.Add(cdef); Canvas child1, child2, child3; MyContentControl mc; // child1 child1 = new Canvas(); child1.Width = 200; child1.Height = 200; mc = new MyContentControl { Content = child1 }; Grid.SetRow(mc, 0); Grid.SetColumn(mc, 0); Grid.SetColumnSpan(mc, 2); g.Children.Add(mc); // child2 child2 = new Canvas(); child2.Width = 150; child2.Height = 200; mc = new MyContentControl { Content = child2 }; Grid.SetRow(mc, 0); Grid.SetColumn(mc, 0); g.Children.Add(mc); // child3 child3 = new Canvas(); child3.Width = 200; child3.Height = 200; mc = new MyContentControl { Content = child3 }; Grid.SetRow(mc, 0); Grid.SetColumn(mc, 0); g.Children.Add(mc); g.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity)); g.CheckMeasureArgs("#MeasureOverrideArg", new Size(inf, 200), new Size(inf, 200), new Size(inf, 200)); g.Reset(); Assert.AreEqual(new Size(200, 400), g.DesiredSize, "DesiredSize"); }
public void ArrangeTest () { MyGrid g = new MyGrid (); RowDefinition rdef; ColumnDefinition cdef; rdef = new RowDefinition (); rdef.Height = new GridLength (50); g.RowDefinitions.Add (rdef); cdef = new ColumnDefinition (); cdef.Width = new GridLength (100); g.ColumnDefinitions.Add (cdef); g.Margin = new Thickness (5); var r = new Border (); MyContentControl mc = new MyContentControl { Content = r }; Grid.SetRow (mc, 0); Grid.SetColumn (mc, 0); g.Children.Add (mc); g.Measure (new Size (Double.PositiveInfinity, Double.PositiveInfinity)); g.CheckMeasureArgs ("#MeasureOverrideArg", new Size (100, 50)); g.Reset (); Assert.AreEqual (new Size (0,0), new Size (r.ActualWidth, r.ActualHeight), "r actual after measure"); Assert.AreEqual (new Size (0,0), new Size (g.ActualWidth, g.ActualHeight), "g actual after measure"); g.Arrange (new Rect (0,0,g.DesiredSize.Width,g.DesiredSize.Height)); g.CheckRowHeights ("#RowHeights", 50); Assert.AreEqual (new Size (0,0), r.DesiredSize, "r desired 0"); Assert.AreEqual (new Size (110,60), g.DesiredSize, "g desired 1"); Assert.AreEqual (new Rect (0,0,100,50).ToString (), LayoutInformation.GetLayoutSlot (r).ToString(), "slot"); Assert.AreEqual (new Size (100,50), new Size (r.ActualWidth, r.ActualHeight), "r actual after arrange"); Assert.AreEqual (new Size (100,50), new Size (g.ActualWidth, g.ActualHeight), "g actual after arrange"); }
public void ComplexLayout1 () { MyGrid g = new MyGrid (); RowDefinition rdef; ColumnDefinition cdef; // Add rows rdef = new RowDefinition (); rdef.Height = new GridLength (200); g.RowDefinitions.Add (rdef); rdef = new RowDefinition (); rdef.Height = new GridLength (200); g.RowDefinitions.Add (rdef); cdef = new ColumnDefinition (); cdef.Width = GridLength.Auto; g.ColumnDefinitions.Add (cdef); cdef = new ColumnDefinition (); cdef.Width = GridLength.Auto; g.ColumnDefinitions.Add (cdef); Canvas child1, child2, child3; MyContentControl mc; // child1 child1 = new Canvas (); child1.Width = 200; child1.Height = 200; mc = new MyContentControl { Content = child1 }; Grid.SetRow (mc, 0); Grid.SetColumn (mc, 0); Grid.SetColumnSpan (mc, 2); g.Children.Add (mc); // child2 child2 = new Canvas (); child2.Width = 150; child2.Height = 200; mc = new MyContentControl { Content = child2 }; Grid.SetRow (mc, 0); Grid.SetColumn (mc, 0); g.Children.Add (mc); // child3 child3 = new Canvas (); child3.Width = 200; child3.Height = 200; mc = new MyContentControl { Content = child3 }; Grid.SetRow (mc, 0); Grid.SetColumn (mc, 0); g.Children.Add (mc); g.Measure (new Size (Double.PositiveInfinity, Double.PositiveInfinity)); g.CheckMeasureArgs ("#MeasureOverrideArg", new Size (inf, 200), new Size (inf, 200), new Size (inf, 200)); g.Reset (); Assert.AreEqual (new Size (200, 400), g.DesiredSize, "DesiredSize"); }
public void Child_ColSpan2_2Columns_constSize_and_1Star_1Row_constSize () { MyGrid g = new MyGrid (); RowDefinition rdef; ColumnDefinition cdef; rdef = new RowDefinition (); rdef.Height = new GridLength (200); g.RowDefinitions.Add (rdef); cdef = new ColumnDefinition (); cdef.Width = new GridLength (200); g.ColumnDefinitions.Add (cdef); cdef = new ColumnDefinition (); cdef.Width = new GridLength (2, GridUnitType.Star); g.ColumnDefinitions.Add (cdef); g.Margin = new Thickness (5); Canvas c; MyContentControl mc; c = new Canvas (); c.Width = 400; c.Height = 400; mc = new MyContentControl { Content = c }; Grid.SetRow (mc, 0); Grid.SetColumn (mc, 0); Grid.SetColumnSpan (mc, 2); g.Children.Add (mc); g.Measure (new Size (Double.PositiveInfinity, Double.PositiveInfinity)); g.CheckMeasureArgs ("#MeasureOverrideArg", new Size (inf, 200)); g.Reset (); Assert.AreEqual (new Size (400, 200), c.DesiredSize, "DesiredSize0"); Assert.AreEqual (new Size (410, 210), g.DesiredSize, "DesiredSize1"); g.Measure (new Size (100, 100)); g.CheckMeasureArgs ("#MeasureOverrideArg 2", new Size (200, 200)); g.Reset (); Assert.AreEqual (new Size (100, 100), g.DesiredSize, "DesiredSize2"); }
public void ChildMargin_autoWidth_autoHeight_singleCell () { MyGrid g = new MyGrid (); RowDefinition rdef; ColumnDefinition cdef; rdef = new RowDefinition (); rdef.Height = GridLength.Auto; g.RowDefinitions.Add (rdef); cdef = new ColumnDefinition (); cdef.Width = GridLength.Auto; g.ColumnDefinitions.Add (cdef); g.Margin = new Thickness (5); Canvas c = new Canvas (); Grid.SetRow (c, 0); Grid.SetColumn (c, 0); g.Children.Add (new MyContentControl { Content = c }); // first test with the child sized larger than the row/column definitions c.Width = 400; c.Height = 400; g.Measure (new Size (Double.PositiveInfinity, Double.PositiveInfinity)); g.CheckMeasureArgs ("#MeasureOverrideArg", new Size (inf, inf)); g.Reset (); Assert.AreEqual (new Size (410, 410), g.DesiredSize, "DesiredSize"); g.Measure (new Size (100, 100)); g.CheckMeasureArgs ("#MeasureOverrideArg 2"); // MeasureOverride is not called g.Reset (); Assert.AreEqual (new Size (100, 100), g.DesiredSize, "DesiredSize"); // now test with the child sized smaller than the row/column definitions c.Width = 100; c.Height = 100; g.Measure (new Size (Double.PositiveInfinity, Double.PositiveInfinity)); g.CheckMeasureArgs ("#MeasureOverrideArg 3", new Size (inf, inf)); g.Reset (); Assert.AreEqual (new Size (110, 110), g.DesiredSize, "DesiredSize"); g.Measure (new Size (100, 100)); g.CheckMeasureArgs ("#MeasureOverrideArg 4"); // MeasureOverride is not called g.Reset (); Assert.AreEqual (new Size (100, 100), g.DesiredSize, "DesiredSize"); }
public void ChildMargin_constWidth_constHeight_singleCell () { MyGrid g = new MyGrid (); RowDefinition rdef; ColumnDefinition cdef; rdef = new RowDefinition (); rdef.Height = new GridLength (200); g.RowDefinitions.Add (rdef); cdef = new ColumnDefinition (); cdef.Width = new GridLength (200); g.ColumnDefinitions.Add (cdef); g.Margin = new Thickness (5); Canvas c = new Canvas (); Grid.SetRow (c, 0); Grid.SetColumn (c, 0); g.Children.Add (new MyContentControl { Content = c }); // first test with the child sized larger than the row/column definitions c.Width = 400; c.Height = 400; g.Measure (new Size (Double.PositiveInfinity, Double.PositiveInfinity)); g.CheckMeasureArgs ("#MeasureOverrideArgs", new Size (200, 200)); g.Reset (); Assert.AreEqual (new Size (200, 200), c.DesiredSize, "DesiredSize0"); Assert.AreEqual (new Size (210, 210), g.DesiredSize, "DesiredSize1"); g.Measure (new Size (100, 100)); g.CheckMeasureArgs ("#MeasureOverrideArgs 2"); // MeasureOverride shouldn't be called. g.Reset (); Assert.AreEqual (new Size (100, 100), g.DesiredSize, "DesiredSize2"); // now test with the child sized smaller than the row/column definitions c.Width = 100; c.Height = 100; g.Measure (new Size (Double.PositiveInfinity, Double.PositiveInfinity)); g.CheckMeasureArgs ("#MeasureOverrideArgs 3", new Size (200, 200)); g.Reset (); Assert.AreEqual (new Size (210, 210), g.DesiredSize, "DesiredSize3"); g.Measure (new Size (100, 100)); g.CheckMeasureArgs ("#MeasureOverrideArgs 4"); // MeasureOverride won't be called. g.Reset (); Assert.AreEqual (new Size (100, 100), g.DesiredSize, "DesiredSize4"); }
public void ArrangeDefaultDefinitions () { MyGrid grid = new MyGrid (); Border b = new Border (); b.Background = new SolidColorBrush (Colors.Red); Border b2 = new Border (); b2.Background = new SolidColorBrush (Colors.Green); b2.Width = b2.Height = 50; grid.Children.Add (new MyContentControl { Content = b }); grid.Children.Add (new MyContentControl { Content = b2 }); grid.Measure (new Size (inf, inf)); grid.CheckMeasureArgs ("#MeasureOverrideArg", new Size (inf, inf), new Size (inf, inf)); grid.Reset (); grid.Measure (new Size (400, 300)); grid.CheckMeasureArgs ("#MeasureOverrideArg 2", new Size (400, 300), new Size (400, 300)); grid.Reset (); grid.Width = 100; grid.Height = 100; grid.Measure (new Size (400,300)); grid.CheckMeasureArgs ("#MeasureOverrideArg 3", new Size (100, 100), new Size (100, 100)); grid.Reset (); grid.Arrange (new Rect (0,0,grid.DesiredSize.Width,grid.DesiredSize.Height)); Assert.AreEqual (new Size (100,100), grid.RenderSize,"grid render"); Assert.AreEqual (new Size (100,100), b.RenderSize, "b render"); Assert.AreEqual (new Size (50,50), b2.RenderSize, "b2 render"); }
public void ChangingGridPropertiesInvalidates () { // Normally remeasuring with the same width/height does not result in MeasureOverride // being called, but if we change a grid property, it does. MyGrid g = new MyGrid (); g.AddRows (GridLength.Auto, GridLength.Auto, GridLength.Auto); g.AddColumns (GridLength.Auto, GridLength.Auto, GridLength.Auto); g.AddChild (ContentControlWithChild (), 0, 0, 1, 1); g.Measure (new Size (50, 50)); g.CheckMeasureArgs ("#1", new Size (inf, inf)); g.Reset (); g.Measure (new Size (50, 50)); g.CheckMeasureArgs ("#2"); g.ChangeRowSpan (0, 2); g.Reset (); g.Measure (new Size (50, 50)); g.CheckMeasureArgs ("#3", new Size (inf, inf)); g.ChangeColSpan (0, 2); g.Reset (); g.Measure (new Size (50, 50)); g.CheckMeasureArgs ("#4", new Size (inf, inf)); g.ChangeRow (0, 1); g.Reset (); g.Measure (new Size (50, 50)); g.CheckMeasureArgs ("#5", new Size (inf, inf)); g.ChangeCol (0, 1); g.Reset (); g.Measure (new Size (50, 50)); g.CheckMeasureArgs ("#6", new Size (inf, inf)); }
public void MeasureAutoAndStarRows () { MyGrid grid = new MyGrid (); grid.AddColumns (new GridLength (50)); grid.AddRows (GridLength.Auto, GridLength.Auto, new GridLength (1, GridUnitType.Star), GridLength.Auto, GridLength.Auto); grid.AddChild (new MyContentControl (50, 50), 0, 0, 3, 1); grid.AddChild (new MyContentControl (50, 60), 1, 0, 3, 1); grid.Measure (new Size (100, 100)); grid.CheckRowHeights ("#1", inf, inf, 100, inf, inf); grid.CheckMeasureArgs ("#2", new Size (50, 100), new Size (50, 100)); grid.CheckMeasureOrder ("#3", 0, 1); Assert.AreEqual (new Size (50, 60), grid.DesiredSize, "#4"); grid.RowDefinitions [2].MaxHeight = 15; grid.Reset (); grid.Measure (new Size (100, 100)); grid.CheckRowHeights ("#5", inf, inf, 15, inf, inf); grid.CheckMeasureArgs ("#6", new Size (50, 15), new Size (50, 15)); Assert.AreEqual (new Size (50, 15), grid.DesiredSize, "#7"); grid.RowDefinitions.Clear (); grid.AddRows (GridLength.Auto, GridLength.Auto, GridLength.Auto, new GridLength (1, GridUnitType.Star), GridLength.Auto); grid.Reset (); grid.Measure (new Size (100, 100)); grid.CheckRowHeights ("#8", inf, inf, inf, 50, inf); grid.CheckMeasureArgs ("#9", new Size (50, inf), new Size (50, 83.33)); Assert.AreEqual (new Size (50, 77), grid.DesiredSize, "#10"); grid.RowDefinitions [3].MaxHeight = 15; grid.Reset (); grid.Measure (new Size (100, 100)); grid.CheckRowHeights ("#11", inf, inf, inf, 15, inf); grid.CheckMeasureArgs ("#12", new Size (50, 48.8)); grid.CheckMeasureOrder ("#13", 1); Assert.AreEqual (new Size (50, 65), grid.DesiredSize, "#12"); }
public void AutoStarPriority () { // Test a bunch of combinations of auto/star with/without span to see // which order things are measured in. MyGrid grid = new MyGrid { Width = 200, Height = 200 }; grid.AddRows (Auto, Auto, Star, Auto, Star); grid.AddColumns (Auto, Star, Auto, Star, Auto); // Two auto-autos and one star-star grid.AddChild (ContentControlWithChild (), 0, 0, 1, 1); grid.AddChild (ContentControlWithChild (), 0, 0, 1, 1); grid.AddChild (ContentControlWithChild (), 4, 3, 1, 1); // Measured in-order. star-star is last. grid.ResetAndInvalidate (); grid.Measure (new Size (200, 200)); grid.CheckMeasureOrder ("#1", 0, 1, 2); grid.CheckMeasureArgs ("#1b", Infinity, Infinity, new Size (75, 75)); grid.ReverseChildren (); grid.ResetAndInvalidate (); grid.Measure (new Size (200, 200)); grid.CheckMeasureOrder ("#2", 1, 2, 0); grid.CheckMeasureArgs ("#2b", Infinity, Infinity, new Size (75, 75)); // Span > 1 does not affect measure order. star-star is last. grid.ReverseChildren (); grid.ChangeRowSpan (0, 2); grid.ResetAndInvalidate (); grid.Measure (new Size (200, 200)); grid.CheckMeasureOrder ("#3", 0, 1, 2); grid.CheckMeasureArgs ("#3b", Infinity, Infinity, new Size (75, 75)); grid.ReverseChildren (); grid.ResetAndInvalidate (); grid.Measure (new Size (200, 200)); grid.CheckMeasureOrder ("#4", 1, 2, 0); grid.CheckMeasureArgs ("#4b", Infinity, Infinity, new Size (75, 75)); // Elements which do not span a star row are measured first. star-star is last. grid.ReverseChildren (); grid.ChangeRowSpan (0, 3); grid.ResetAndInvalidate (); grid.Measure (new Size (200, 200)); grid.CheckMeasureOrder ("#5", 1, 0, 2); grid.CheckMeasureArgs ("#5b", Infinity, new Size (inf, 125), new Size (75, 75)); grid.ReverseChildren (); grid.ResetAndInvalidate (); grid.Measure (new Size (200, 200)); grid.CheckMeasureOrder ("#6", 1, 2, 0); grid.CheckMeasureArgs ("#6b", Infinity, new Size (inf, 125), new Size (75, 75)); // Elements which do not span a star col are measured first. star-star is last. grid.ReverseChildren (); grid.ChangeRowSpan (0, 1); grid.ChangeColSpan (0, 2); grid.ResetAndInvalidate (); grid.Measure (new Size (200, 200)); grid.CheckMeasureOrder ("#7", 1, 0, 2); grid.CheckMeasureArgs ("#7b", Infinity, new Size (125, inf), new Size (75, 75)); grid.ReverseChildren (); grid.ResetAndInvalidate (); grid.Measure (new Size (200, 200)); grid.CheckMeasureOrder ("#8", 1, 2, 0); grid.CheckMeasureArgs ("#8b", Infinity, new Size (125, inf), new Size (75, 75)); // Elements which span a Star row are measured before ones spanning a Star col. star-star is last. grid.ReverseChildren (); grid.ChangeRowSpan (1, 3); grid.ResetAndInvalidate (); grid.Measure (new Size (200, 200)); grid.CheckMeasureOrder ("#9", 1, 0, 1, 2); grid.CheckMeasureArgs ("#9b", Infinity, new Size (125, inf), new Size (inf, 125), new Size (75, 75)); grid.ReverseChildren (); grid.ResetAndInvalidate (); grid.Measure (new Size (200, 200)); grid.CheckMeasureOrder ("#10", 1, 2, 1, 0); grid.CheckMeasureArgs ("#10b", Infinity, new Size (125, inf), new Size (inf, 125), new Size (75, 75)); // Auto/Auto is measured before all. star-star is last. grid.ReverseChildren (); grid.AddChild (ContentControlWithChild (), 0, 0, 1, 1); grid.ResetAndInvalidate (); grid.Measure (new Size (200, 200)); grid.CheckMeasureOrder ("#11", 3, 1, 0, 1, 2); grid.CheckMeasureArgs ("#11b", Infinity, Infinity, new Size (125, inf), new Size (inf, 125), new Size (75, 75)); grid.ReverseChildren (); grid.ResetAndInvalidate (); grid.Measure (new Size (200, 200)); grid.CheckMeasureOrder ("#12", 0, 2, 3, 2, 1); grid.CheckMeasureArgs ("#12b", Infinity, Infinity, new Size (125, inf), new Size (inf, 125), new Size (75, 75)); }
public void StarAutoIsNotInfinite () { var child1 =new MyContentControl { }; var child2 = new MyContentControl { }; MyGrid grid = new MyGrid (); grid.AddRows (Auto, Auto, Auto, Star); grid.AddColumns (Auto, Star); grid.AddChild (child1, 0, 0, 1, 1); grid.AddChild (child2, 0, 0, 4, 2); grid.Measure (new Size (100, 100)); Assert.AreEqual (Infinity, child1.MeasureOverrideArg, "#1"); Assert.AreEqual (new Size (100, 100), child2.MeasureOverrideArg, "#2"); }
public void ExpandInArrange_CanvasParent () { // Measure with infinity and check results. MyGrid grid = new MyGrid (); grid.AddRows (Star); grid.AddColumns (Star); grid.AddChild (ContentControlWithChild (), 0, 0, 1, 1); var parent = new Canvas (); parent.Children.Add (grid); CreateAsyncTest (parent, () => { grid.Reset (); TestPanel.Measure (Infinity); // Nothing is measured as the grid always uses (Inf, Inf) to measure children. grid.CheckMeasureArgs ("#1"); Assert.AreEqual (new Size (50, 50), grid.DesiredSize, "#3"); grid.Reset (); grid.Arrange (new Rect (0, 0, 100, 100)); grid.CheckMeasureArgs ("#8"); // No remeasures grid.CheckArrangeArgs ("#9", new Size (100, 100)); grid.CheckArrangeResult ("#10", new Size (100, 100)); grid.CheckRowHeights ("#11", 100); grid.CheckColWidths ("#12", 100); // If we measure with a finite size, the rows/cols still expand // to consume the available space grid.Reset (); grid.Measure (new Size (1000, 1000)); grid.CheckMeasureArgs ("#13", new Size (1000, 1000)); grid.CheckMeasureResult ("#14", new Size (50, 50)); Assert.AreEqual (new Size (50, 50), grid.DesiredSize, "#15"); // When we pass in the desired size as the arrange arg, // the rows/cols use that as their height/width grid.Arrange (new Rect (0, 0, grid.DesiredSize.Width, grid.DesiredSize.Height)); grid.CheckArrangeArgs ("#16", grid.DesiredSize); grid.CheckArrangeResult ("#17", grid.DesiredSize); grid.CheckRowHeights ("#18", grid.DesiredSize.Height); grid.CheckColWidths ("#19", grid.DesiredSize.Width); // If we pass in twice the desired size, the rows/cols consume that too grid.Reset (); grid.Arrange (new Rect (0, 0, 100, 100)); grid.CheckMeasureArgs ("#20"); // No remeasures grid.CheckArrangeArgs ("#21", new Size (100, 100)); grid.CheckArrangeResult ("#22", new Size (100, 100)); grid.CheckRowHeights ("#23", 100); grid.CheckColWidths ("#24", 100); }); }
public void ExpandInArrange_OutsideTree_NoParent_UnfixedSize () { // We always expand star rows if we're not in the live tree // with no parent // Measure with infinity and check results. MyGrid grid = new MyGrid (); grid.AddRows (Star); grid.AddColumns (Star); grid.AddChild (ContentControlWithChild (), 0, 0, 1, 1); grid.Measure (Infinity); grid.CheckMeasureArgs ("#1", Infinity); grid.CheckMeasureResult ("#2", new Size (50, 50)); Assert.AreEqual (new Size (50, 50), grid.DesiredSize, "#3"); // When we pass in the desired size as the arrange arg, // the rows/cols use that as their height/width grid.Arrange (new Rect (0, 0, grid.DesiredSize.Width, grid.DesiredSize.Height)); grid.CheckArrangeArgs ("#4", grid.DesiredSize); grid.CheckArrangeResult ("#5", grid.DesiredSize); grid.CheckRowHeights ("#6", grid.DesiredSize.Height); grid.CheckColWidths ("#7", grid.DesiredSize.Width); // If we pass in twice the desired size, the rows/cols consume that too grid.Reset (); grid.Arrange (new Rect (0, 0, 100, 100)); grid.CheckMeasureArgs ("#8"); // No remeasures grid.CheckArrangeArgs ("#9", new Size (100, 100)); grid.CheckArrangeResult ("#10", new Size (100, 100)); grid.CheckRowHeights ("#11", 100); grid.CheckColWidths ("#12", 100); // If we measure with a finite size, the rows/cols still expand // to consume the available space grid.Reset (); grid.Measure (new Size (1000, 1000)); grid.CheckMeasureArgs ("#13", new Size (1000, 1000)); grid.CheckMeasureResult ("#14", new Size (50, 50)); Assert.AreEqual (new Size (50, 50), grid.DesiredSize, "#15"); // When we pass in the desired size as the arrange arg, // the rows/cols use that as their height/width grid.Arrange (new Rect (0, 0, grid.DesiredSize.Width, grid.DesiredSize.Height)); grid.CheckArrangeArgs ("#16", grid.DesiredSize); grid.CheckArrangeResult ("#17", grid.DesiredSize); grid.CheckRowHeights ("#18", grid.DesiredSize.Height); grid.CheckColWidths ("#19", grid.DesiredSize.Width); // If we pass in twice the desired size, the rows/cols consume that too grid.Reset (); grid.Arrange (new Rect (0, 0, 100, 100)); grid.CheckMeasureArgs ("#20"); // No remeasures grid.CheckArrangeArgs ("#21", new Size (100, 100)); grid.CheckArrangeResult ("#22", new Size (100, 100)); grid.CheckRowHeights ("#23", 100); grid.CheckColWidths ("#24", 100); }
public void ExpandInArrange () { // Measure with infinity and check results. MyGrid grid = new MyGrid (); grid.AddRows (Star); grid.AddColumns (Star); grid.AddChild (ContentControlWithChild (), 0, 0, 1, 1); grid.Measure (Infinity); grid.CheckMeasureArgs ("#1", Infinity); grid.CheckMeasureResult ("#2", new Size (50, 50)); Assert.AreEqual (new Size (50, 50), grid.DesiredSize, "#3"); // Check that everything is as expected when we pass in DesiredSize as the argument to Arrange grid.Arrange (new Rect (0, 0, grid.DesiredSize.Width, grid.DesiredSize.Height)); grid.CheckArrangeArgs ("#4", grid.DesiredSize); grid.CheckArrangeResult ("#5", grid.DesiredSize); grid.CheckRowHeights ("#6", grid.DesiredSize.Height); grid.CheckColWidths ("#7", grid.DesiredSize.Width); grid.Reset (); grid.Arrange (new Rect (0, 0, 100, 100)); grid.CheckMeasureArgs ("#8"); // No remeasures grid.CheckArrangeArgs ("#9", new Size (100, 100)); grid.CheckArrangeResult ("#10", new Size (100, 100)); grid.CheckRowHeights ("#11", 100); grid.CheckColWidths ("#12", 100); }