feat(OverflowTip): implement internal text viewport metrics for TextBox and TextArea to enhance tooltip visibility handling

This commit is contained in:
chinboy
2026-08-03 15:59:49 +08:00
parent 2705ae051b
commit 306c315638
10 changed files with 383 additions and 12 deletions
@@ -198,6 +198,7 @@ public class TextBox : AvaloniaTextBox,
private IDisposable? _feedbackStatusSubscription;
private TextPresenter? _textPresenter;
private IDisposable? _preeditTextSubscription;
private IDisposable? _textViewportSubscription;
static TextBox()
{
@@ -311,6 +312,7 @@ public class TextBox : AvaloniaTextBox,
_clearButton.Click += HandleClearButtonClicked;
}
SetupTextPresenterPreeditSubscription(e);
SetupTextViewportMetrics(e);
ConfigureEffectiveShowClearButton();
ConfigurePlaceholderTextVisibility();
HandleInputChanged(Text);
@@ -329,6 +331,22 @@ public class TextBox : AvaloniaTextBox,
}
}
private void SetupTextViewportMetrics(TemplateAppliedEventArgs e)
{
_textViewportSubscription?.Dispose();
_textViewportSubscription = null;
var scrollViewer = e.NameScope.Find<ScrollViewer>("PART_ScrollViewer") ??
e.NameScope.Find<ScrollViewer>("ScrollViewer");
if (scrollViewer is null)
{
TextViewportMetrics.SetViewportWidth(this, null);
return;
}
_textViewportSubscription = TextViewportMetrics.PublishViewportWidth(this, scrollViewer, _textPresenter);
}
private void ConfigurePlaceholderTextVisibility()
{
SetCurrentValue(IsPlaceholderTextVisibleProperty,