Comment : utiliser la vérification de l'orthographe avec un menu contextuel
Mise à jour : novembre 2007
Par défaut, lorsque vous activez la correction orthographique dans un contrôle d'édition comme TextBox ou RichTextBox, vous placez des options de correction orthographique dans le menu contextuel. Par exemple, lorsque les utilisateurs cliquent avec le bouton droit sur un mot mal orthographié, ils obtiennent un ensemble de propositions ou l'option Ignorer tout. Toutefois, lorsque vous remplacez le menu contextuel par défaut par votre propre menu contextuel personnalisé, cette fonctionnalité est perdue et vous devez écrire le code pour revalider la fonction de correction orthographique dans le menu contextuel. L'exemple suivant indique comment activer cette fonctionnalité sur un TextBox.
Exemple
L'exemple suivant illustre le XAML (Extensible Application Markup Language) qui crée un TextBox avec quelques événements utilisés pour implémenter le menu contextuel.
<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>
L'exemple suivant illustre le code qui implémente le menu contextuel.
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;
}
}
}
Le code utilisé à cette fin avec un RichTextBox est similaire. La principale différence se situe au niveau du paramètre transmis à la méthode GetSpellingError. Pour un TextBox, passez l'index d'entiers de la position du signe insertion :
spellingError = myTextBox.GetSpellingError(caretIndex);
Pour un RichTextBox, transmettez le TextPointer qui indique la position du signe insertion :
spellingError = myRichTextBox.GetSpellingError(myRichTextBox.CaretPosition);
Voir aussi
Tâches
Comment : activer la vérification de l'orthographe dans un contrôle d'édition de texte
Comment : utiliser un menu contextuel personnalisé avec un TextBox