From 1102444b9459efc8d899a12fc48b81f0de033661 Mon Sep 17 00:00:00 2001 From: Betta_Fish <96322503+zxbmmmmmmmmm@users.noreply.github.com> Date: Sun, 23 Mar 2025 23:27:25 +0800 Subject: [PATCH] Fix grid desired size error (#18507) * fix desired size error * cache RowSpacing and ColumnSpacing * add unittest --------- Co-authored-by: Poker --- src/Avalonia.Controls/Grid.cs | 6 ++++-- tests/Avalonia.Controls.UnitTests/GridTests.cs | 8 ++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Avalonia.Controls/Grid.cs b/src/Avalonia.Controls/Grid.cs index 7d30a7e923..956ee55007 100644 --- a/src/Avalonia.Controls/Grid.cs +++ b/src/Avalonia.Controls/Grid.cs @@ -446,6 +446,8 @@ namespace Avalonia.Controls // MeasureCellsGroup(extData.CellGroup1, constraint, false, false); + double rowSpacing = RowSpacing; + double columnSpacing = ColumnSpacing; double combinedRowSpacing = RowSpacing * (RowDefinitions.Count - 1); double combinedColumnSpacing = ColumnSpacing * (ColumnDefinitions.Count - 1); Size innerAvailableSize = new Size(constraint.Width - combinedColumnSpacing, constraint.Height - combinedRowSpacing); @@ -513,7 +515,7 @@ namespace Avalonia.Controls gridDesiredSize = new Size( CalculateDesiredSize(DefinitionsU) + ColumnSpacing * (DefinitionsU.Count - 1), - CalculateDesiredSize(DefinitionsV) + RowSpacing * (DefinitionsU.Count - 1)); + CalculateDesiredSize(DefinitionsV) + RowSpacing * (DefinitionsV.Count - 1)); } } finally @@ -547,8 +549,8 @@ namespace Avalonia.Controls else { Debug.Assert(DefinitionsU.Count > 0 && DefinitionsV.Count > 0); - double columnSpacing = ColumnSpacing; double rowSpacing = RowSpacing; + double columnSpacing = ColumnSpacing; double combinedRowSpacing = rowSpacing * (RowDefinitions.Count - 1); double combinedColumnSpacing = columnSpacing * (ColumnDefinitions.Count - 1); SetFinalSize(DefinitionsU, arrangeSize.Width - combinedColumnSpacing, true); diff --git a/tests/Avalonia.Controls.UnitTests/GridTests.cs b/tests/Avalonia.Controls.UnitTests/GridTests.cs index 8633aeed5c..2647911721 100644 --- a/tests/Avalonia.Controls.UnitTests/GridTests.cs +++ b/tests/Avalonia.Controls.UnitTests/GridTests.cs @@ -1768,12 +1768,16 @@ namespace Avalonia.Controls.UnitTests { var target = new Grid { - Height = 100, ColumnSpacing = 20, + RowDefinitions = RowDefinitions.Parse("Auto"), ColumnDefinitions = ColumnDefinitions.Parse("20,20"), Children = { - new Border { [Grid.ColumnSpanProperty] = 2 } + new Border + { + Height = 100, + [Grid.ColumnSpanProperty] = 2 + } }, }; target.Measure(new Size(100, 100));