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);
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);

8
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));

Loading…
Cancel
Save