Browse Source

Only add embedded controls to the visual tree if they are part of the TextLayout

pull/12695/head
Benedikt Stebner 3 years ago
parent
commit
8b0f2588fa
  1. 5
      src/Avalonia.Controls/Documents/InlineUIContainer.cs
  2. 16
      src/Avalonia.Controls/TextBlock.cs

5
src/Avalonia.Controls/Documents/InlineUIContainer.cs

@ -58,6 +58,11 @@ namespace Avalonia.Controls.Documents
internal override void BuildTextRun(IList<TextRun> textRuns) internal override void BuildTextRun(IList<TextRun> textRuns)
{ {
if(!Child.IsMeasureValid)
{
Child.Measure(Size.Infinity);
}
textRuns.Add(new EmbeddedControlRun(Child, CreateTextRunProperties())); textRuns.Add(new EmbeddedControlRun(Child, CreateTextRunProperties()));
} }

16
src/Avalonia.Controls/TextBlock.cs

@ -679,14 +679,18 @@ namespace Avalonia.Controls
_textRuns = textRuns; _textRuns = textRuns;
foreach (var textRun in _textRuns) foreach (var textLine in TextLayout.TextLines)
{ {
if (textRun is EmbeddedControlRun controlRun && foreach (var run in textLine.TextRuns)
controlRun.Control is Control control)
{ {
VisualChildren.Add(control); if (run is DrawableTextRun drawable)
{
control.Measure(Size.Infinity); if (drawable is EmbeddedControlRun controlRun
&& controlRun.Control is Control control)
{
VisualChildren.Add(control);
}
}
} }
} }
} }

Loading…
Cancel
Save