Browse Source

Fix visual tree handling when Inlines is reset

pull/11761/head
Benedikt Stebner 3 years ago
parent
commit
475f22f6f6
  1. 12
      src/Avalonia.Controls/TextBlock.cs
  2. 33
      tests/Avalonia.Controls.UnitTests/TextBlockTests.cs

12
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<TextRun>();

33
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()
{

Loading…
Cancel
Save