Hai ragione
Questo è il codice VB. Ho intercettato tutte le eccezioni ma non riesco ad intercettare questa perché la gestisce il textBox...

codice:
    Private Sub ButtonModifica_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles ButtonModifica.Click
        Dim Conferma = MsgBox("Applico modifiche?", vbYesNo)
        Select Case Conferma
            Case vbYes
                If IndirizzoComboBox.SelectedIndex = -1 Then
                    MsgBox("Record non trovato")
                    InfoScuolaEntityViewSource.View.MoveCurrentToFirst()
                    Exit Sub
                End If
                Try
                    If NomeScuolaTextBox.Text = Nothing Or IndirizzoTextBox.Text = Nothing Or _
                       MeccanograficoTextBox.Text = Nothing Or TelefonoTextBox.Text = Nothing Or _
                       EmailTextBox.Text = Nothing Then
                        Throw New ArgumentNullException
                    End If
                Catch ex As ArgumentNullException
                    MsgBox("Non sono ammessi campi vuoti")
                    DbScuoleDataSet.RejectChanges()
                    Exit Sub
                End Try
                Try
                    TelefonoTextBox.Text = CLng(TelefonoTextBox.Text)
                Catch ex As InvalidCastException
                    MsgBox("Numero di telefono non valido")
                    DbScuoleDataSet.RejectChanges()
                    Exit Sub
                End Try
                DbScuoleDataSetInfoScuolaEntityTableAdapter.Update(DbScuoleDataSet)
                MsgBox("Modifiche apportate")
            Case vbNo
                DbScuoleDataSet.RejectChanges()
                MsgBox("Modifiche non apportate")
        End Select
    End Sub

End Class
Questo è il codice XAML riguardante lo stile del textBox e fa apparire un punto esclamativo in caso di mancata convalida. Ma secondo me può essere omesso perché si tratta di gestire qualche evento che non capisco nel codice VB. Per sicurezza posto il codice:

codice:
<Style x:Key="TextBoxStyle"
               TargetType="{x:Type TextBox}">
            <Setter Property="FontSize"
                    Value="15" />
            <Setter Property="Height"
                    Value="28" />
            <Setter Property="Width"
                    Value="210" />
            <Setter Property="Validation.ErrorTemplate">
                <Setter.Value>
                    <ControlTemplate>
                        <DockPanel LastChildFill="True">
                            <Ellipse DockPanel.Dock="Right" 
                                 ToolTip="{Binding ElementName=myTextbox, 
                                     Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"
                                 Width="15" Height="15" 
                                 Margin="-25,0,0,0"
                                 StrokeThickness="1" Fill="Red" >
                                <Ellipse.Stroke>
                                    <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
                                        <GradientStop Color="#FFFA0404" Offset="0"/>
                                        <GradientStop Color="#FFC9C7C7" Offset="1"/>
                                    </LinearGradientBrush>
                                </Ellipse.Stroke>
                                <Ellipse.Triggers>
                                    <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                                        <BeginStoryboard Storyboard="{StaticResource FlashErrorIcon}"/>
                                    </EventTrigger>
                                </Ellipse.Triggers>
                            </Ellipse>
                            <TextBlock DockPanel.Dock="Right" 
                                ToolTip="{Binding ElementName=myControl, 
                                     Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"
                                Foreground="White"
                                FontSize="11pt" 
                                Margin="-15,5,0,0" FontWeight="Bold">!
                            <TextBlock.Triggers>
                                <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                                    <BeginStoryboard Storyboard="{StaticResource FlashErrorIcon}"/>
                                </EventTrigger>
                            </TextBlock.Triggers>
                            </TextBlock>
                            <Border BorderBrush="Red" BorderThickness="1">
                                <AdornedElementPlaceholder Name="myControl"/>
                            </Border>
                        </DockPanel>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="true">
                    <Setter Property="ToolTip"
                        Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                        Path=(Validation.Errors)[0].ErrorContent}"/>
                </Trigger>
            </Style.Triggers>
        </Style>