From 8b0f2588fa70df49dfd72233f75c4de60428adc5 Mon Sep 17 00:00:00 2001 From: Benedikt Stebner Date: Mon, 28 Aug 2023 12:30:02 +0200 Subject: [PATCH] Only add embedded controls to the visual tree if they are part of the TextLayout --- .../Documents/InlineUIContainer.cs | 5 +++++ src/Avalonia.Controls/TextBlock.cs | 16 ++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/Avalonia.Controls/Documents/InlineUIContainer.cs b/src/Avalonia.Controls/Documents/InlineUIContainer.cs index f06c8515ee..7f5aa55959 100644 --- a/src/Avalonia.Controls/Documents/InlineUIContainer.cs +++ b/src/Avalonia.Controls/Documents/InlineUIContainer.cs @@ -58,6 +58,11 @@ namespace Avalonia.Controls.Documents internal override void BuildTextRun(IList textRuns) { + if(!Child.IsMeasureValid) + { + Child.Measure(Size.Infinity); + } + textRuns.Add(new EmbeddedControlRun(Child, CreateTextRunProperties())); } diff --git a/src/Avalonia.Controls/TextBlock.cs b/src/Avalonia.Controls/TextBlock.cs index ea420c7c45..46503b9185 100644 --- a/src/Avalonia.Controls/TextBlock.cs +++ b/src/Avalonia.Controls/TextBlock.cs @@ -679,14 +679,18 @@ namespace Avalonia.Controls _textRuns = textRuns; - foreach (var textRun in _textRuns) + foreach (var textLine in TextLayout.TextLines) { - if (textRun is EmbeddedControlRun controlRun && - controlRun.Control is Control control) + foreach (var run in textLine.TextRuns) { - VisualChildren.Add(control); - - control.Measure(Size.Infinity); + if (run is DrawableTextRun drawable) + { + if (drawable is EmbeddedControlRun controlRun + && controlRun.Control is Control control) + { + VisualChildren.Add(control); + } + } } } }