Wpf – TextBox – Corrector ortográfico

Descripción general:

Recopilación de información encontrada en MSDN sobre como implementar un corrector ortográfico en un control TextBox, y que el menu contextual previamente definido no interfiera con el corrector

Wpf – TextBox – Corrector ortográfico


↑↑↑

Cómo: Habilitar el corrector ortográfico en un control de edición de texto

Referencia bibliográfica, ver el enlace al final de la pagina

Ejemplo

Lenguaje de marcado de aplicaciones extensible (XAML)


<StackPanel>
    <TextBox SpellCheck.IsEnabled = "True" Name = "myTextBox"></TextBox>
</StackPanel>

Ejemplo

El siguiente ejemplo muestra el código que implementa un corrector ortográfico


' Enable spellchecking on the TextBox.
 myTextBox.SpellCheck.IsEnabled = true


↑↑↑

Cómo: Usar el corrector ortográfico con un menú contextual

Referencia bibliográfica, ver el enlace al final de la pagina

De forma predeterminada, cuando habilita la revisión ortográfica en un control de edición como TextBox o RichTextBox , obtiene opciones de revisión ortográfica en el menú contextual . Por ejemplo, cuando los usuarios hacen clic con el botón derecho en una palabra mal escrita, obtienen un conjunto de sugerencias ortográficas o la opción de Ignorar todo. Sin embargo, cuando reemplaza el menú contextual predeterminado con su propio menú contextual personalizado, esta funcionalidad se pierde y necesita escribir código para volver a habilitar la función de revisión ortográfica en el menú contextual. El siguiente ejemplo muestra cómo habilitar esto en un cuadro de texto.

Ejemplo

Lenguaje de marcado de aplicaciones extensible (XAML)

El siguiente ejemplo muestra el lenguaje de marcado de aplicaciones extensible (XAML) que crea un cuadro de texto con algunos eventos que se usan para implementar el menú contextual.


<TextBox
       Name = "myTextBox"
      TextWrapping = "Wrap"
      SpellCheck.IsEnabled = "True"
      ContextMenuOpening = "tb_ContextMenuOpening">
         En un menú personalizado, debe escribir código para agregar opciones de speler
        porque todo en un menú contextual personalizado debe agregarse explícitamente.
</TextBox>

Ejemplo

El siguiente ejemplo muestra el código que implementa el menú contextual.


        Private Sub OnWindowLoaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
            'This is required for the first time ContextMenu invocation
            'so that TextEditor doesnt handle it.
            myTextBox.ContextMenu = GetContextMenu()
        End Sub
        Private Sub tb_ContextMenuOpening(ByVal sender As Object,
                                          ByVal e As RoutedEventArgs)
            Dim caretIndex, cmdIndex As Integer
            Dim spellingError As SpellingError
            myTextBox.ContextMenu = GetContextMenu()
            caretIndex = myTextBox.CaretIndex
            cmdIndex = 0
            spellingError = myTextBox.GetSpellingError(caretIndex)
            If spellingError IsNot Nothing Then
                For Each str As String In spellingError.Suggestions
                    Dim mi As New MenuItem()
                    mi.Header = str
                    mi.FontWeight = FontWeights.Bold
                    mi.Command = EditingCommands.CorrectSpellingError
                    mi.CommandParameter = str
                    mi.CommandTarget = myTextBox
                    myTextBox.ContextMenu.Items.Insert(cmdIndex, mi)
                    cmdIndex + = 1
                Next str
                Dim separatorMenuItem1 As New Separator()
                myTextBox.ContextMenu.Items.Insert(cmdIndex, separatorMenuItem1)
                cmdIndex + = 1
                Dim ignoreAllMI As New MenuItem()
                ignoreAllMI.Header = "Ignore All"
                ignoreAllMI.Command = EditingCommands.IgnoreSpellingError
                ignoreAllMI.CommandTarget = myTextBox
                myTextBox.ContextMenu.Items.Insert(cmdIndex, ignoreAllMI)
                cmdIndex + = 1
                Dim separatorMenuItem2 As New Separator()
                myTextBox.ContextMenu.Items.Insert(cmdIndex, separatorMenuItem2)
            End If
        End Sub
        ' Gets a fresh context menu.
        Private Function GetContextMenu() As ContextMenu
            Dim cm As New ContextMenu()
            'Can create STATIC custom menu items if exists here...
            Dim m1, m2, m3, m4 As MenuItem
            m1 = New MenuItem()
            m1.Header = "File"
            m2 = New MenuItem()
            m2.Header = "Save"
            m3 = New MenuItem()
            m3.Header = "SaveAs"
            m4 = New MenuItem()
            m4.Header = "Recent Files"
            'Can add functionality for the custom menu items here...
            cm.Items.Add(m1)
            cm.Items.Add(m2)
            cm.Items.Add(m3)
            cm.Items.Add(m4)
            Return cm
        End Function

El código utilizado para hacer esto con RichTextBox es similar. La principal diferencia está en el parámetro pasado al método GetSpellingError . Para un cuadro de texto, pase el índice entero de la posición del símbolo de intercalación:


ortografíaError = myTextBox.GetSpellingError(caretIndex);

Para un RichTextBox, pase el TextPointer que especifica la posición del símbolo de intercalación:


error ortográfico = myRichTextBox.GetSpellingError(myRichTextBox.CaretPosition);