From 9753aa5535548f380780113e223b2d591ffe7676 Mon Sep 17 00:00:00 2001 From: Emmanuel Hansen Date: Thu, 2 Nov 2023 00:59:21 +0000 Subject: [PATCH] only add text selector layer when textpresenter is loaded. (#13458) --- .../Presenters/TextPresenter.cs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.Controls/Presenters/TextPresenter.cs b/src/Avalonia.Controls/Presenters/TextPresenter.cs index d7ecc2e90a..88577c19db 100644 --- a/src/Avalonia.Controls/Presenters/TextPresenter.cs +++ b/src/Avalonia.Controls/Presenters/TextPresenter.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using Avalonia.Controls.Documents; using Avalonia.Controls.Primitives; +using Avalonia.Interactivity; using Avalonia.Layout; using Avalonia.Media; using Avalonia.Media.Immutable; @@ -584,6 +585,12 @@ namespace Avalonia.Controls.Presenters InvalidateMeasure(); } + protected override void OnLoaded(RoutedEventArgs e) + { + base.OnLoaded(e); + EnsureTextSelectionLayer(); + } + protected override Size MeasureOverride(Size availableSize) { _constraint = availableSize; @@ -850,14 +857,20 @@ namespace Avalonia.Controls.Presenters _caretTimer.Tick += CaretTimerTick; + if (TextSelectionHandleCanvas is { } canvas && _layer != null && !_layer.Children.Contains(canvas)) + _layer?.Add(TextSelectionHandleCanvas); + } + + private void EnsureTextSelectionLayer() + { if (TextSelectionHandleCanvas == null) { TextSelectionHandleCanvas = new TextSelectionHandleCanvas(); + TextSelectionHandleCanvas.SetPresenter(this); } - _layer = TextSelectorLayer.GetTextSelectorLayer(this); - _layer?.Add(TextSelectionHandleCanvas); - TextSelectionHandleCanvas.SetPresenter(this); + if (_layer != null && !_layer.Children.Contains(TextSelectionHandleCanvas)) + _layer?.Add(TextSelectionHandleCanvas); } protected override void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e)