Mark the text control as being changed to prevent any text content or selection changed events
<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="600" Width="800"> <DockPanel> <StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal"> <TextBox x:Name="tbxInsertionText" Width="200" Margin="5,0" /> <Button DockPanel.Dock="Bottom" Content="Insert" Click="btnInsert_Click"/> </StackPanel> <RichTextBox x:Name="rtbTextContent" /> </DockPanel> </Window> //File:Window.xaml.vb Imports System.Windows Imports System.Windows.Documents Imports System.Windows.Input Namespace WpfApplication1 Public Partial Class Window1 Inherits Window Public Sub New() InitializeComponent() End Sub Private Sub btnInsert_Click(sender As Object, e As RoutedEventArgs) If String.IsNullOrEmpty(tbxInsertionText.Text) Then Return End If rtbTextContent.BeginChange() If rtbTextContent.Selection.Text <> String.Empty Then rtbTextContent.Selection.Text = String.Empty End If Dim tp As TextPointer = rtbTextContent.CaretPosition.GetPositionAtOffset(0, LogicalDirection.Forward) rtbTextContent.CaretPosition.InsertTextInRun(tbxInsertionText.Text) rtbTextContent.CaretPosition = tp rtbTextContent.EndChange() Keyboard.Focus(rtbTextContent) End Sub End Class End Namespace