Это происходит потому, что TextBox обрабатывает событие MouseDown. Так как он установлен на всплеск , он не достигнет содержащего ListBoxItem. Самый простой способ исправить это - просто обработать выбор ListBoxItems в PreviewMouseDown, который будет происходить и туннелировать до того, как фактическое событие MouseDown вспыхнет.
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<EventSetter Event="PreviewMouseDown"
Handler="ListBoxItem_PreviewMouseDown" />
</Style>
</ListBox.ItemContainerStyle>
А в коде для файла xaml:
private void ListBoxItem_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
var item = (sender as ListBoxItem);
if (item != null)
item.IsSelected = true;
}