diff --git a/src/Avalonia.Controls/Primitives/VisualLayerManager.cs b/src/Avalonia.Controls/Primitives/VisualLayerManager.cs index d188a32940..90260c1546 100644 --- a/src/Avalonia.Controls/Primitives/VisualLayerManager.cs +++ b/src/Avalonia.Controls/Primitives/VisualLayerManager.cs @@ -148,8 +148,12 @@ namespace Avalonia.Controls.Primitives /// protected override Size MeasureOverride(Size availableSize) { - foreach (var l in _layers) + for (var index = 0; index < _layers.Count; index++) + { + var l = _layers[index]; l.Measure(availableSize); + } + return base.MeasureOverride(availableSize); } diff --git a/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs b/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs index f908f6bff4..9ed8bd9966 100644 --- a/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs @@ -1367,6 +1367,29 @@ namespace Avalonia.Controls.UnitTests } } + [Fact] + public void TextBox_In_AdornerLayer_Will_Not_Cause_Collection_Modified_In_VisualLayerManager() + { + using (UnitTestApplication.Start(Services)) + { + var button = new Button(); + var root = new TestRoot() + { + Child = new VisualLayerManager() + { + Child = button + } + }; + var adorner = new TextBox { Template = CreateTemplate(), Text = "a" }; + + var adornerLayer = AdornerLayer.GetAdornerLayer(button); + adornerLayer.Children.Add(adorner); + AdornerLayer.SetAdornedElement(adorner, button); + + root.Measure(Size.Infinity); + } + } + [Theory] [InlineData("A\nBB\nCCC\nDDDD", 0, 0)] [InlineData("A\nBB\nCCC\nDDDD", 1, 2)]