@ -642,15 +642,31 @@ namespace Avalonia.Controls
if ( ! string . IsNullOrEmpty ( input ) )
{
DeleteSelection ( ) ;
caretIndex = CaretIndex ;
text = Text ? ? string . Empty ;
SetTextInternal ( text . Substring ( 0 , caretIndex ) + input + text . Substring ( caretIndex ) ) ;
CaretIndex + = input . Length ;
ClearSelection ( ) ;
if ( IsUndoEnabled )
var oldText = _ text ;
_ ignoreTextChanges = true ;
try
{
_ undoRedoHelper . DiscardRedo ( ) ;
DeleteSelection ( false ) ;
caretIndex = CaretIndex ;
text = Text ? ? string . Empty ;
SetTextInternal ( text . Substring ( 0 , caretIndex ) + input + text . Substring ( caretIndex ) ) ;
CaretIndex + = input . Length ;
ClearSelection ( ) ;
if ( IsUndoEnabled )
{
_ undoRedoHelper . DiscardRedo ( ) ;
}
if ( _ text ! = oldText )
{
RaisePropertyChanged ( TextProperty , oldText , _ text ) ;
}
}
finally
{
_ ignoreTextChanges = false ;
}
}
}
@ -1285,7 +1301,7 @@ namespace Avalonia.Controls
CaretIndex = SelectionEnd ;
}
private bool DeleteSelection ( )
private bool DeleteSelection ( bool raiseTextChanged = true )
{
if ( ! IsReadOnly )
{
@ -1297,7 +1313,7 @@ namespace Avalonia.Controls
var start = Math . Min ( selectionStart , selectionEnd ) ;
var end = Math . Max ( selectionStart , selectionEnd ) ;
var text = Text ;
SetTextInternal ( text . Substring ( 0 , start ) + text . Substring ( end ) ) ;
SetTextInternal ( text . Substring ( 0 , start ) + text . Substring ( end ) , raiseTextChanged ) ;
CaretIndex = start ;
ClearSelection ( ) ;
return true ;
@ -1348,16 +1364,23 @@ namespace Avalonia.Controls
return i ;
}
private void SetTextInternal ( string value )
private void SetTextInternal ( string value , bool raiseTextChanged = true )
{
try
if ( raiseTextChanged )
{
_ ignoreTextChanges = true ;
SetAndRaise ( TextProperty , ref _ text , value ) ;
try
{
_ ignoreTextChanges = true ;
SetAndRaise ( TextProperty , ref _ text , value ) ;
}
finally
{
_ ignoreTextChanges = false ;
}
}
finally
else
{
_ ignoreTextChanges = false ;
_ text = valu e;
}
}