Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Actualización: noviembre 2007
De manera predeterminada, al habilitar la revisión ortográfica en un control de edición como TextBox o RichTextBox, se obtienen las opciones de revisión ortográfica en el menú contextual. Por ejemplo, cuando los usuarios hacen clic con el botón secundario en una palabra incorrecta, obtienen un conjunto de sugerencias ortográficas, o la opción a Omitir todas. Sin embargo, si invalida el menú contextual predeterminado con su propio menú contextual personalizado, se pierde esta funcionalidad y es preciso escribir código para volver a habilitar la característica de revisión ortográfica en el menú contextual. En el ejemplo siguiente se muestra cómo habilitarla en un control TextBox.
Ejemplo
En el ejemplo siguiente se muestra Lenguaje de marcado de aplicaciones extensible (XAML) que crea un control TextBox con algunos eventos que se utilizan para implementar el menú contextual.
<Page x:Class="SDKSample.SpellerCustomContextMenu"
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
Loaded="OnWindowLoaded">
<TextBox
Name="myTextBox"
TextWrapping="Wrap"
SpellCheck.IsEnabled="True"
ContextMenuOpening="tb_ContextMenuOpening">
In a custum menu you need to write code to add speler choices
because everything in a custom context menu has to be added explicitly.
</TextBox>
</Page>
En el ejemplo siguiente se muestra el código que implementa el menú contextual.
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace SDKSample
{
public partial class SpellerCustomContextMenu : Page
{
void OnWindowLoaded(object sender, RoutedEventArgs e)
{
//This is required for the first time ContextMenu invocation so that TextEditor doesnt handle it.
myTextBox.ContextMenu = GetContextMenu();
}
void tb_ContextMenuOpening(object sender, RoutedEventArgs e)
{
int caretIndex, cmdIndex;
SpellingError spellingError;
myTextBox.ContextMenu = GetContextMenu();
caretIndex = myTextBox.CaretIndex;
cmdIndex = 0;
spellingError = myTextBox.GetSpellingError(caretIndex);
if (spellingError != null)
{
foreach (string str in spellingError.Suggestions)
{
MenuItem mi = 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++;
}
Separator separatorMenuItem1 = new Separator();
myTextBox.ContextMenu.Items.Insert(cmdIndex, separatorMenuItem1);
cmdIndex++;
MenuItem ignoreAllMI = new MenuItem();
ignoreAllMI.Header = "Ignore All";
ignoreAllMI.Command = EditingCommands.IgnoreSpellingError;
ignoreAllMI.CommandTarget = myTextBox;
myTextBox.ContextMenu.Items.Insert(cmdIndex, ignoreAllMI);
cmdIndex++;
Separator separatorMenuItem2 = new Separator();
myTextBox.ContextMenu.Items.Insert(cmdIndex, separatorMenuItem2);
}
}
// Gets a fresh context menu.
private ContextMenu GetContextMenu()
{
ContextMenu cm = new ContextMenu();
//Can create STATIC custom menu items if exists here...
MenuItem m1, m2, m3, m4;
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;
}
}
}
El código utilizado para ello con un control RichTextBox es similar. La diferencia principal reside en el parámetro que se pasa al método GetSpellingError. Para TextBox, se pasa el índice de tipo entero correspondiente a la posición del símbolo de intercalación:
spellingError = myTextBox.GetSpellingError(caretIndex);
Para RichTextBox, se pasa el objeto TextPointer que especifica la posición del símbolo de intercalación:
spellingError = myRichTextBox.GetSpellingError(myRichTextBox.CaretPosition);
Vea también
Tareas
Cómo: Habilitar el corrector ortográfico en un control de edición de texto
Cómo: Usar un menú contextual personalizado con un control TextBox