Browse Source

Fix grid desired size error (#18507)

* fix desired size error

* cache RowSpacing and ColumnSpacing

* add unittest

---------

Co-authored-by: Poker <poker_sang@outlook.com>
pull/18516/head
Betta_Fish 11 months ago
committed by GitHub
parent
commit
1102444b94
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 6
      src/Avalonia.Controls/Grid.cs
  2. 8
      tests/Avalonia.Controls.UnitTests/GridTests.cs

6
src/Avalonia.Controls/Grid.cs

@ -446,6 +446,8 @@ namespace Avalonia.Controls
// //
MeasureCellsGroup(extData.CellGroup1, constraint, false, false); MeasureCellsGroup(extData.CellGroup1, constraint, false, false);
double rowSpacing = RowSpacing;
double columnSpacing = ColumnSpacing;
double combinedRowSpacing = RowSpacing * (RowDefinitions.Count - 1); double combinedRowSpacing = RowSpacing * (RowDefinitions.Count - 1);
double combinedColumnSpacing = ColumnSpacing * (ColumnDefinitions.Count - 1); double combinedColumnSpacing = ColumnSpacing * (ColumnDefinitions.Count - 1);
Size innerAvailableSize = new Size(constraint.Width - combinedColumnSpacing, constraint.Height - combinedRowSpacing); Size innerAvailableSize = new Size(constraint.Width - combinedColumnSpacing, constraint.Height - combinedRowSpacing);
@ -513,7 +515,7 @@ namespace Avalonia.Controls
gridDesiredSize = new Size( gridDesiredSize = new Size(
CalculateDesiredSize(DefinitionsU) + ColumnSpacing * (DefinitionsU.Count - 1), CalculateDesiredSize(DefinitionsU) + ColumnSpacing * (DefinitionsU.Count - 1),
CalculateDesiredSize(DefinitionsV) + RowSpacing * (DefinitionsU.Count - 1)); CalculateDesiredSize(DefinitionsV) + RowSpacing * (DefinitionsV.Count - 1));
} }
} }
finally finally
@ -547,8 +549,8 @@ namespace Avalonia.Controls
else else
{ {
Debug.Assert(DefinitionsU.Count > 0 && DefinitionsV.Count > 0); Debug.Assert(DefinitionsU.Count > 0 && DefinitionsV.Count > 0);
double columnSpacing = ColumnSpacing;
double rowSpacing = RowSpacing; double rowSpacing = RowSpacing;
double columnSpacing = ColumnSpacing;
double combinedRowSpacing = rowSpacing * (RowDefinitions.Count - 1); double combinedRowSpacing = rowSpacing * (RowDefinitions.Count - 1);
double combinedColumnSpacing = columnSpacing * (ColumnDefinitions.Count - 1); double combinedColumnSpacing = columnSpacing * (ColumnDefinitions.Count - 1);
SetFinalSize(DefinitionsU, arrangeSize.Width - combinedColumnSpacing, true); SetFinalSize(DefinitionsU, arrangeSize.Width - combinedColumnSpacing, true);

8
tests/Avalonia.Controls.UnitTests/GridTests.cs

@ -1768,12 +1768,16 @@ namespace Avalonia.Controls.UnitTests
{ {
var target = new Grid var target = new Grid
{ {
Height = 100,
ColumnSpacing = 20, ColumnSpacing = 20,
RowDefinitions = RowDefinitions.Parse("Auto"),
ColumnDefinitions = ColumnDefinitions.Parse("20,20"), ColumnDefinitions = ColumnDefinitions.Parse("20,20"),
Children = Children =
{ {
new Border { [Grid.ColumnSpanProperty] = 2 } new Border
{
Height = 100,
[Grid.ColumnSpanProperty] = 2
}
}, },
}; };
target.Measure(new Size(100, 100)); target.Measure(new Size(100, 100));

Loading…
Cancel
Save