diff --git a/src/Avalonia.Controls/Primitives/VisualLayerManager.cs b/src/Avalonia.Controls/Primitives/VisualLayerManager.cs index 90260c1546..889662f02c 100644 --- a/src/Avalonia.Controls/Primitives/VisualLayerManager.cs +++ b/src/Avalonia.Controls/Primitives/VisualLayerManager.cs @@ -160,8 +160,12 @@ namespace Avalonia.Controls.Primitives /// protected override Size ArrangeOverride(Size finalSize) { - foreach (var l in _layers) + for (var index = 0; index < _layers.Count; index++) + { + var l = _layers[index]; l.Arrange(new Rect(finalSize)); + } + return base.ArrangeOverride(finalSize); } } diff --git a/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs b/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs index 12fd9ef343..1cd42a6c6a 100644 --- a/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs @@ -1406,7 +1406,7 @@ namespace Avalonia.Controls.UnitTests } [Fact] - public void TextBox_In_AdornerLayer_Will_Not_Cause_Collection_Modified_In_VisualLayerManager() + public void TextBox_In_AdornerLayer_Will_Not_Cause_Collection_Modified_In_VisualLayerManager_Measure() { using (UnitTestApplication.Start(Services)) { @@ -1428,6 +1428,29 @@ namespace Avalonia.Controls.UnitTests } } + [Fact] + public void TextBox_In_AdornerLayer_Will_Not_Cause_Collection_Modified_In_VisualLayerManager_Arrange() + { + using (UnitTestApplication.Start(Services)) + { + var button = new Button(); + var visualLayerManager = new VisualLayerManager() { Child = button }; + var root = new TestRoot() + { + Child = visualLayerManager + }; + var adorner = new TextBox { Template = CreateTemplate(), Text = "a" }; + var adornerLayer = AdornerLayer.GetAdornerLayer(button); + + root.Measure(new Size(10, 10)); + + adornerLayer.Children.Add(adorner); + AdornerLayer.SetAdornedElement(adorner, button); + + root.Arrange(new Rect(0, 0, 10, 10)); + } + } + [Theory] [InlineData("A\nBB\nCCC\nDDDD", 0, 0)] [InlineData("A\nBB\nCCC\nDDDD", 1, 2)]