|
|
|
@ -514,21 +514,36 @@ namespace Avalonia.Controls |
|
|
|
|
|
|
|
private void HandleTextInput(string input) |
|
|
|
{ |
|
|
|
if (!IsReadOnly) |
|
|
|
if (IsReadOnly) |
|
|
|
{ |
|
|
|
input = RemoveInvalidCharacters(input); |
|
|
|
string text = Text ?? string.Empty; |
|
|
|
int caretIndex = CaretIndex; |
|
|
|
if (!string.IsNullOrEmpty(input) && (MaxLength == 0 || input.Length + text.Length - (Math.Abs(SelectionStart - SelectionEnd)) <= MaxLength)) |
|
|
|
{ |
|
|
|
DeleteSelection(); |
|
|
|
caretIndex = CaretIndex; |
|
|
|
text = Text ?? string.Empty; |
|
|
|
SetTextInternal(text.Substring(0, caretIndex) + input + text.Substring(caretIndex)); |
|
|
|
CaretIndex += input.Length; |
|
|
|
ClearSelection(); |
|
|
|
_undoRedoHelper.DiscardRedo(); |
|
|
|
} |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
input = RemoveInvalidCharacters(input); |
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(input)) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
string text = Text ?? string.Empty; |
|
|
|
int caretIndex = CaretIndex; |
|
|
|
int estimatedLength = input.Length + text.Length - Math.Abs(SelectionStart - SelectionEnd); |
|
|
|
|
|
|
|
if (MaxLength > 0 && estimatedLength > MaxLength) |
|
|
|
{ |
|
|
|
input = input.Remove(Math.Max(0, input.Length - (estimatedLength - MaxLength))); |
|
|
|
} |
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(input)) |
|
|
|
{ |
|
|
|
DeleteSelection(); |
|
|
|
caretIndex = CaretIndex; |
|
|
|
text = Text ?? string.Empty; |
|
|
|
SetTextInternal(text.Substring(0, caretIndex) + input + text.Substring(caretIndex)); |
|
|
|
CaretIndex += input.Length; |
|
|
|
ClearSelection(); |
|
|
|
_undoRedoHelper.DiscardRedo(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|