Class MainWindow 
  Public Sub New()
    InitializeComponent()
  End Sub

  Private Sub formPrincipal_Loaded(sender As Object, e As RoutedEventArgs)
    ctGradosC.Focus()
  End Sub

  Private Sub ctGrados_GotKeyboardFocus(sender As Object, e As KeyboardFocusChangedEventArgs)
    Dim ObjTextBox As TextBox = TryCast(sender, TextBox)
    ObjTextBox.SelectAll()
  End Sub

  'Private Sub Grid_PreviewKeyDown(sender As Object, e As KeyEventArgs)
  '  If e.Key = Key.Enter Then
  '    ' Se pulsó la tecla Entrar
  '    e.Handled = True
  '    Conversion(e.Source)
  '  End If
  'End Sub

  Private Sub Conversion(source As Object)
    Dim objTextBox As TextBox = TryCast(source, TextBox)
    Try
      Dim grados As Double

      ' Si se escribió en la caja de texto grados centígrados...
      If objTextBox Is ctGradosC Then
        grados = Convert.ToDouble(ctGradosC.Text) * 9.0 / 5.0 + 32.0
        ' Mostrar el resultado redondeado a dos decimales
        ctGradosF.Text = String.Format("{0:F2}", grados)
      End If
      ' Si se escribió en la caja de texto grados Fahrenheit...
      If objTextBox Is ctGradosF Then
        grados = (Convert.ToDouble(ctGradosF.Text) - 32.0) * 5.0 / 9.0
        ' Mostrar el resultado redondeado a dos decimales
        ctGradosC.Text = String.Format("{0:F2}", grados)
      End If
    Catch exc As FormatException
      ctGradosC.Text = "0,00"
      ctGradosF.Text = "32,00"
    End Try
  End Sub

  Private Sub ValidarTecla_PreviewTextInput(sender As Object, e As TextCompositionEventArgs)
    If e.Text = vbCr Then
      ' Se pulsó la tecla Entrar
      e.Handled = True
      Conversion(e.Source)
    ElseIf e.Text = "," Then
      Dim ObjTextBox As TextBox = DirectCast(e.Source, TextBox)
      If ObjTextBox.Text.IndexOf(","c) <> -1 Then
        ' Sólo puede haber una coma
        e.Handled = True
      End If
    ElseIf e.Text = "-" OrElse e.Text = "+" Then
      Dim ObjTextBox As TextBox = DirectCast(e.Source, TextBox)
      ' Admitir - o + sólo en la primera posición:
      If ObjTextBox.SelectionLength = ObjTextBox.Text.Length Then
        ' Todo el texto está seleccionado: se sobrescribe con el signo
        e.Handled = False
      ElseIf ObjTextBox.Text.Length <> 0 Then
        ' La primera posición ya está ocupada
        e.Handled = True
      End If
    ElseIf e.Text.CompareTo("0") < 0 OrElse e.Text.CompareTo("9") > 0 Then
      ' Desechar los caracteres que no son dígitos
      e.Handled = True
    End If
  End Sub
End Class
