diff --git a/src/Avalonia.Controls/TextBoxTextInputMethodClient.cs b/src/Avalonia.Controls/TextBoxTextInputMethodClient.cs index 9c6f784a15..e999d0bb74 100644 --- a/src/Avalonia.Controls/TextBoxTextInputMethodClient.cs +++ b/src/Avalonia.Controls/TextBoxTextInputMethodClient.cs @@ -106,7 +106,7 @@ namespace Avalonia.Controls { if (_presenter != null && _textEditable != null) { - _presenter.CompositionRegion = new TextRange(_textEditable.CompositionStart, _textEditable.CompositionEnd); + _presenter.SetCurrentValue(TextPresenter.CompositionRegionProperty, new TextRange(_textEditable.CompositionStart, _textEditable.CompositionEnd)); } } @@ -179,7 +179,7 @@ namespace Avalonia.Controls _presenter.SetCurrentValue(TextPresenter.TextProperty, text); - _presenter.PreeditText = preeditText; + _presenter.SetCurrentValue(TextPresenter.PreeditTextProperty, preeditText); _presenter.UpdateCaret(new CharacterHit(_compositionStart + (preeditText != null ? preeditText.Length : 0)), false); @@ -201,9 +201,12 @@ namespace Avalonia.Controls return preeditText; } - var text = _presenterText.Substring(0, _compositionStart) + preeditText + _presenterText.Substring(_compositionStart); + var sb = StringBuilderCache.Acquire(_presenterText.Length + preeditText.Length); - return text; + sb.Append(_presenterText); + sb.Insert(_compositionStart, preeditText); + + return StringBuilderCache.GetStringAndRelease(sb); } public void SetComposingRegion(TextRange? region) @@ -213,7 +216,7 @@ namespace Avalonia.Controls return; } - _presenter.CompositionRegion = region; + _presenter.SetCurrentValue(TextPresenter.CompositionRegionProperty, region); } public void SelectInSurroundingText(int start, int end) @@ -252,9 +255,9 @@ namespace Avalonia.Controls if (_presenter != null) { - _presenter.PreeditText = null; + _presenter.ClearValue(TextPresenter.PreeditTextProperty); - _presenter.CompositionRegion = null; + _presenter.ClearValue(TextPresenter.CompositionRegionProperty); _presenter.CaretBoundsChanged -= OnCaretBoundsChanged; }