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/Primitives/ScrollBar.cs b/src/Avalonia.Controls/Primitives/ScrollBar.cs index 86bea8daa5..264b944566 100644 --- a/src/Avalonia.Controls/Primitives/ScrollBar.cs +++ b/src/Avalonia.Controls/Primitives/ScrollBar.cs @@ -195,14 +195,15 @@ namespace Avalonia.Controls.Primitives } /// - /// Locates the first ancestor and binds to its properties. Properties which have been set through other means are not bound. + /// Try to attach to TemplatedParent if it is a and binds to its properties. + /// Properties which have been set through other means are not bound. /// /// /// This method is automatically called when the control is attached to a visual tree. /// internal void AttachToScrollViewer() { - var owner = this.FindAncestorOfType(); + var owner = this.TemplatedParent as ScrollViewer; if (owner == null) { diff --git a/src/Avalonia.Controls/TextBlock.cs b/src/Avalonia.Controls/TextBlock.cs index cc92bdd752..6af572cc7a 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); + } + } } } } diff --git a/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs b/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs index fd3d80729a..c0afe0c7ff 100644 --- a/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs @@ -170,6 +170,7 @@ namespace Avalonia.Controls.UnitTests target.Inlines.Add("123456"); target.Measure(Size.Infinity); + target.Arrange(new Rect(target.DesiredSize)); Assert.True(button.IsMeasureValid); Assert.Equal(80, button.DesiredSize.Width);