[WPF] SpellCheck: La correction orthographique de WPF
Faire du Silverlight, c'est pas mal mais je tenais à vous reparler un peu de WPF (Windows Presentation Foundation), une de mes grandes passions (avec LINQ
)
WPF est livré, en standard, avec des fonctionnalités de correction orthographique (SpellCheck) pour les contrôles de saisie de texte:
Pour activer la correction orthographique, il vous suffit de mettre à True l'attribut/propriété SpellCheck.IsEnabled:
<StackPanel x:Name="LayoutRoot">
<TextBox x:Name="tb" SpellCheck.IsEnabled="True" />
</StackPanel>
Une fois cette propriété activée, la correction orthographique est automatiquement activée et dès lors qu'un mot est mal écrit dans la zone de texte, celui-ci est souligné en rouge:
En faisant un clic droit sur le mot souligné en rouge (autrement dit le mot qui n'est pas correctement écrit), vous avez la possibilité de faire apparaitre une menu contextuel qui vous affiche une liste de suggestions possibles:
Si vous cliquez sur l'un des mots proposés dans cette liste, le mot que vous avez choisi remplace alors le mot de la zone de texte.
Vous pourriez vous demander (et vous auriez tout à fait raison) d'où provient cette liste de suggestions. En fait, il s'agit d'une copie du dictionnaire utilisé par Office 2007. Attention, il s'agit d'une copie par conséquent, vous n'êtes pas obligé de posséder Office 2007 pour que cela fonctionne 
De plus, vous devez savoir qu'il n'est, pour le moment, pas possible de changer le dictionnaire utilisé par WPF pour le remplacer par votre propre dictionnaire (source de mots/données). Cette fonctionnalité n'est pas présente dans la V1 cependant, les équipes de développement réfléchissent à la possibilité de rendre cela possible dans la prochaine version de WPF.
Par défaut, WPF est livré avec 4 dictionnaires de langues: Anglais, Espagnol, Allemand et Français. Si vous voulez changer le dictionnaire en cours, vous allez devoir spécifier la valeur de l'attribut/propriété Language:
<StackPanel x:Name="LayoutRoot">
<TextBox x:Name="tb" SpellCheck.IsEnabled="True" Language="en-US" />
</StackPanel>
Comme vous pouvez le constater, les valeurs possibles sont indiquées sous la forme de culture, autrement dit dans le format: xx-XX.
Maintenant, il est évident qu'Office 2007 n'est pas parfait et ne connait pas forcément tous les mots que vous voudriez employer (surtout s'il s'agit de mots spécifiques à votre métier).
Vous ne pouvez pas, de base, rajouter des mots dans la liste des suggestions qui s'affiche via le menu contextuel. En effet, il n'y a pas d'APIs disponibles permettant de le faire. Cependant, vous pouvez tout à fait contourner ce problème en créant votre propre menu contextuel, en récupérant la liste des suggestions proposées puis en ajoutant vos propres mots. Pour cela, il vous suffit d'utiliser le code suivant, qui permet de récupérer la liste des suggestions pour un mot mal orthographié:
void tb_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
SpellingError error = this.tb.GetSpellingError(this.tb.CaretIndex);
if (error != null)
{
foreach (string suggestion in error.Suggestions)
{
// Add suggestion to the ContextMenu
}
// Add your custom words to the ContextMenu
}
}
Vous venez de personnaliser avec succès la liste de suggestion
Et voila qui conclut notre petit tour du SpellCheck. Comme vous pouvez le voir, la correction orthographique disponible avec WPF est relativement complète (même si certains points sont encore manquants) et permet de réaliser, très facilement, des applications offrant la meilleure expérience utilisateur.
A+
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :