Al eliminar IsEnabled y configurar TextBox como ReadOnly, se puede seleccionar el texto pero detener la entrada del usuario.
IsReadOnly="True"
El único problema con este enfoque es que, aunque usted no será capaz de escribir en el cuadro de texto que sigue se verá 'Activado'.
Para redondear eso (si lo desea) puede simplemente agregar un estilo para aclarar el texto y oscurecer el fondo (para que parezca deshabilitado).
He agregado el siguiente ejemplo con un estilo que moverá el cuadro de texto entre una apariencia deshabilitada y habilitada.
<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="300" Width="300">
<Window.Resources>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="IsReadOnly" Value="True">
<Setter Property="Background" Value="LightGray" />
</Trigger>
<Trigger Property="IsReadOnly" Value="True">
<Setter Property="Foreground" Value="DarkGray" />
</Trigger>
<Trigger Property="IsReadOnly" Value="False">
<Setter Property="Background" Value="White" />
</Trigger>
<Trigger Property="IsReadOnly" Value="False">
<Setter Property="Foreground" Value="Black" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<TextBox Height="23" Margin="25,22,133,0" IsReadOnly="True" Text="monkey" Name="textBox1" VerticalAlignment="Top" />
<Button Height="23" Margin="25,51,133,0" Name="button1" VerticalAlignment="Top" Click="button1_Click">Button</Button>
</Grid>
private void button1_Click(object sender, RoutedEventArgs e)
{
textBox1.IsReadOnly = !textBox1.IsReadOnly;
}
He usado 'SelectAll()' y luego le permite hacer clic derecho y copiar el contenido sin embargo. – EricG