diff --git a/src/Avalonia.Controls/Grid.cs b/src/Avalonia.Controls/Grid.cs index 2e49104694..df70cdf6d0 100644 --- a/src/Avalonia.Controls/Grid.cs +++ b/src/Avalonia.Controls/Grid.cs @@ -448,8 +448,8 @@ namespace Avalonia.Controls MeasureCellsGroup(extData.CellGroup1, false, false); double rowSpacing = RowSpacing; double columnSpacing = ColumnSpacing; - double combinedRowSpacing = RowSpacing * (RowDefinitions.Count - 1); - double combinedColumnSpacing = ColumnSpacing * (ColumnDefinitions.Count - 1); + double combinedRowSpacing = RowSpacing * (DefinitionsV.Count - 1); + double combinedColumnSpacing = ColumnSpacing * (DefinitionsU.Count - 1); Size innerAvailableSize = new Size(constraint.Width - combinedColumnSpacing, constraint.Height - combinedRowSpacing); { // after Group1 is measured, only Group3 may have cells belonging to Auto rows. @@ -551,8 +551,8 @@ namespace Avalonia.Controls Debug.Assert(DefinitionsU.Count > 0 && DefinitionsV.Count > 0); double rowSpacing = RowSpacing; double columnSpacing = ColumnSpacing; - double combinedRowSpacing = rowSpacing * (RowDefinitions.Count - 1); - double combinedColumnSpacing = columnSpacing * (ColumnDefinitions.Count - 1); + double combinedRowSpacing = rowSpacing * (DefinitionsV.Count - 1); + double combinedColumnSpacing = columnSpacing * (DefinitionsU.Count - 1); SetFinalSize(DefinitionsU, arrangeSize.Width - combinedColumnSpacing, true); SetFinalSize(DefinitionsV, arrangeSize.Height - combinedRowSpacing, false); diff --git a/tests/Avalonia.Controls.UnitTests/GridTests.cs b/tests/Avalonia.Controls.UnitTests/GridTests.cs index c1bbc5acc3..7205db7950 100644 --- a/tests/Avalonia.Controls.UnitTests/GridTests.cs +++ b/tests/Avalonia.Controls.UnitTests/GridTests.cs @@ -1900,6 +1900,36 @@ namespace Avalonia.Controls.UnitTests Assert.Equal(grid1.Children[4].Bounds.Width, grid2.Children[0].Bounds.Width); } + + [Fact] + public void Grid_With_ColumnSpacing_And_ColumnDefinitions_Unset() + { + var target = new Grid + { + Height = 300, + Width = 100, + ColumnSpacing = 10, + RowDefinitions = RowDefinitions.Parse("Auto,*"),//Set RowDefinitions to avoid + Children = + { + new Border + { + [Grid.RowProperty] = 0, + Height = 80, + Margin = new Thickness(10), + }, + new Border + { + [Grid.RowProperty] = 1, + Margin = new Thickness(20), + }, + }, + }; + target.Measure(new Size(100, 300)); + target.Arrange(new Rect(target.DesiredSize)); + Assert.Equal(new Rect(10, 10, 80, 80), target.Children[0].Bounds); + Assert.Equal(new Rect(20, 120, 60, 160),target.Children[1].Bounds); + } private class TestControl : Control { public Size MeasureSize { get; set; }