diff --git a/src/Avalonia.Controls/TextBlock.cs b/src/Avalonia.Controls/TextBlock.cs index 57d709ba94..ea420c7c45 100644 --- a/src/Avalonia.Controls/TextBlock.cs +++ b/src/Avalonia.Controls/TextBlock.cs @@ -668,17 +668,7 @@ namespace Avalonia.Controls if (HasComplexContent) { - if (_textRuns != null) - { - foreach (var textRun in _textRuns) - { - if (textRun is EmbeddedControlRun controlRun && - controlRun.Control is Control control) - { - VisualChildren.Remove(control); - } - } - } + VisualChildren.Clear(); var textRuns = new List(); diff --git a/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs b/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs index e9250788c0..eb1d6f5ea4 100644 --- a/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs @@ -115,6 +115,39 @@ namespace Avalonia.Controls.UnitTests } } + [Fact] + public void Changing_Inlines_Should_Reset_InlineUIContainer_VisualParent_On_Measure() + { + using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface)) + { + var target = new TextBlock(); + + var control = new Control(); + + var run = new InlineUIContainer(control); + + target.Inlines.Add(run); + + target.Measure(Size.Infinity); + + Assert.True(target.IsMeasureValid); + + Assert.Equal(target, control.VisualParent); + + target.Inlines = null; + + Assert.Null(run.Parent); + + target.Inlines = new InlineCollection { new Run("Hello World") }; + + Assert.Null(run.Parent); + + target.Measure(Size.Infinity); + + Assert.Null(control.VisualParent); + } + } + [Fact] public void InlineUIContainer_Child_Schould_Be_Arranged() {