diff --git a/src/Avalonia.Controls/TextBox.cs b/src/Avalonia.Controls/TextBox.cs index 3016dc8239..3b92baa42a 100644 --- a/src/Avalonia.Controls/TextBox.cs +++ b/src/Avalonia.Controls/TextBox.cs @@ -814,7 +814,12 @@ namespace Avalonia.Controls if (IsFocused) { - _presenter?.ShowCaret(); + if(_presenter != null) + { + _presenter.ShowCaret(); + + _presenter.PropertyChanged += PresenterPropertyChanged; + } } } @@ -822,9 +827,29 @@ namespace Avalonia.Controls { base.OnDetachedFromVisualTree(e); + if (_presenter != null) + { + _presenter.HideCaret(); + + _presenter.PropertyChanged -= PresenterPropertyChanged; + } + _imClient.SetPresenter(null, null); } + private void PresenterPropertyChanged(object? sender, AvaloniaPropertyChangedEventArgs e) + { + if(e.Property == TextPresenter.PreeditTextProperty) + { + if(string.IsNullOrEmpty(e.OldValue as string) && !string.IsNullOrEmpty(e.NewValue as string)) + { + PseudoClasses.Set(":empty", false); + + DeleteSelection(); + } + } + } + protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) { base.OnPropertyChanged(change);