|
@@ -1879,6 +1879,37 @@ namespace Avalonia.Controls
|
|
|
return text.Substring(start, end - start);
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// Returns the sum of any vertical whitespace added between the <see cref="ScrollViewer"/> and <see cref="TextPresenter"/> in the control template.
|
|
|
+ /// </summary>
|
|
|
+ /// <returns>The total vertical whitespace.</returns>
|
|
|
+ private double GetVerticalSpaceBetweenScrollViewerAndPresenter()
|
|
|
+ {
|
|
|
+ var verticalSpace = 0.0;
|
|
|
+ if (_presenter != null)
|
|
|
+ {
|
|
|
+ Visual? visual = _presenter;
|
|
|
+ while ((visual != null) && (visual != this))
|
|
|
+ {
|
|
|
+ if (visual == _scrollViewer)
|
|
|
+ {
|
|
|
+ // ScrollViewer is a stopping point and should only include the Padding
|
|
|
+ verticalSpace += _scrollViewer.Padding.Top + _scrollViewer.Padding.Bottom;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ var margin = visual.GetValue<Thickness>(Layoutable.MarginProperty);
|
|
|
+ var padding = visual.GetValue<Thickness>(Decorator.PaddingProperty);
|
|
|
+
|
|
|
+ verticalSpace += margin.Top + padding.Top + padding.Bottom + margin.Bottom;
|
|
|
+
|
|
|
+ visual = visual.VisualParent;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return verticalSpace;
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// Raises both the <see cref="TextChanging"/> and <see cref="TextChanged"/> events.
|
|
|
/// </summary>
|
|
@@ -2032,8 +2063,9 @@ namespace Avalonia.Controls
|
|
|
var typeface = new Typeface(FontFamily, FontStyle, FontWeight, FontStretch);
|
|
|
var paragraphProperties = TextLayout.CreateTextParagraphProperties(typeface, fontSize, null, default, default, null, default, LineHeight, default);
|
|
|
var textLayout = new TextLayout(new MaxLinesTextSource(MaxLines), paragraphProperties);
|
|
|
+ var verticalSpace = GetVerticalSpaceBetweenScrollViewerAndPresenter();
|
|
|
|
|
|
- maxHeight = Math.Ceiling(textLayout.Height);
|
|
|
+ maxHeight = Math.Ceiling(textLayout.Height + verticalSpace);
|
|
|
}
|
|
|
|
|
|
_scrollViewer.SetCurrentValue(MaxHeightProperty, maxHeight);
|