diff --git a/src/Avalonia.Controls/LayoutTransformControl.cs b/src/Avalonia.Controls/LayoutTransformControl.cs index 06069a897e..5f8d4a561d 100644 --- a/src/Avalonia.Controls/LayoutTransformControl.cs +++ b/src/Avalonia.Controls/LayoutTransformControl.cs @@ -215,7 +215,7 @@ namespace Avalonia.Controls /// /// Transformation matrix corresponding to _matrixTransform. /// - private Matrix _transformation; + private Matrix _transformation = Matrix.Identity; private IDisposable? _transformChangedEvent; /// @@ -256,13 +256,16 @@ namespace Avalonia.Controls /// private void ApplyLayoutTransform() { - if (LayoutTransform == null) - return; - // Get the transform matrix and apply it - _transformation = RoundMatrix(LayoutTransform.Value, DecimalsAfterRound); + var matrix = LayoutTransform is null ? + Matrix.Identity : + RoundMatrix(LayoutTransform.Value, DecimalsAfterRound); + + if (_transformation == matrix) + return; - _matrixTransform.Matrix = _transformation; + _transformation = matrix; + _matrixTransform.Matrix = matrix; // New transform means re-layout is necessary InvalidateMeasure(); diff --git a/tests/Avalonia.Controls.UnitTests/LayoutTransformControlTests.cs b/tests/Avalonia.Controls.UnitTests/LayoutTransformControlTests.cs index 60139c2881..c8a5af05a4 100644 --- a/tests/Avalonia.Controls.UnitTests/LayoutTransformControlTests.cs +++ b/tests/Avalonia.Controls.UnitTests/LayoutTransformControlTests.cs @@ -169,6 +169,25 @@ namespace Avalonia.Controls.UnitTests new Rect(0, 100, 100, 25)); } + [Fact] + public void Bounds_On_Transform_Applied_Then_Removed_Are_Correct() + { + using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface); + + var control = CreateWithChildAndMeasureAndTransform( + 100, + 25, + new RotateTransform { Angle = 90 }); + + Assert.Equal(new Size(25, 100), control.DesiredSize); + + control.LayoutTransform = null; + control.Measure(Size.Infinity); + control.Arrange(new Rect(control.DesiredSize)); + + Assert.Equal(new Size(100, 25), control.DesiredSize); + } + [Fact] public void Should_Generate_RotateTransform_90_degrees() {