Modifier la langue du système pour une fenêtre active dans WPF

Est-il possible de changer la langue du système pour une seule fenêtre dans WPF?

Je connais InputLanguageManager mais je suppose que cela change la langue dans tout le système.

InputLanguageManager fait exactement ce que vous demandez. Il modifie la disposition du clavier pour l’application en cours.

La disposition du clavier est conservée par le système d’exploitation pour chaque application en cours d’exécution. Par exemple. Si vous ouvrez le Bloc-notes et basculez vers le russe, ouvrez Internet Explorer et passez à l’anglais, lorsque vous activez l’application Bloc-notes, les parameters régionaux de votre clavier seront toujours en russe.

La ligne suivante modifie les parameters régionaux du clavier uniquement pour l’application en cours:

 InputLanguageManager.Current.CurrentInputLanguage = new CultureInfo("el-GR"); 

La langue du système (ou plutôt les parameters régionaux du système) et la disposition du clavier sont des concepts complètement différents. La disposition du clavier est la disposition de votre clavier.

Il existe trois parameters régionaux différents utilisés dans une application .NET:

  • Les parameters régionaux de l’interface utilisateur sont les parameters régionaux utilisés pour afficher les messages et sélectionner les chaînes et les dispositions d’interface utilisateur localisées. Vous pouvez modifier les parameters régionaux de l’interface utilisateur d’un thread en définissant sa propriété Thread.CurrentUICulture. Sa valeur initiale est régie par la langue d’affichage du système d’exploitation dans les parameters régionaux
  • Les parameters régionaux du thread sont utilisés pour parsingr les chaînes et convertir les dates et les valeurs numériques en chaîne. Vous pouvez le changer en définissant la propriété Thread.CurrentCulture. Sa valeur d’origine est régie par les parameters régionaux du système d’exploitation.
  • Les parameters régionaux du système sont utilisés par des applications non Unicode ou lors de l’écriture sur des fichiers ASCII et sur la console.

Vous pouvez également tirer parti de la liaison de données WPF et utiliser InputLanguage en tant que propriété jointe. Dans votre XAML, vous pouvez append la propriété InputLanguageManager.InputLanguage à la déclaration d’un élément comme ceci:

  

Vous pouvez ensuite lier la propriété à une propriété dans votre code-behind ou à votre ViewModel. Par exemple.

  

Si vous définissez cette propriété sur une valeur spécifique, le clavier de l’élément de l’interface utilisateur change:

 MyLanguageInfo = new CultureInfo("en-US"); 

ou

 MyLanguageInfo = new CultureInfo("el-GR"); 

Vous pouvez aller plus loin avec ceci et lier la propriété InputLanguage aux autres éléments, par exemple. une liste de choix de langue

Pour la modification de la disposition du clavier, vous êtes InputLanguageManager dans le bon sens.

 InputLanguageManager.SetInputLanguage(this,CultureInfo.CreateSpecificCulture("ru")); 

Avec le premier paramètre de la méthode SetInputLanguage() vous définissez le DependencyObject qui est la cible de votre disposition de clavier.