2017-01-29 3 views
0

J'ai programmé une option de langue choisie dans mon projet, en utilisant MergedDictionaries et les paramètres du projet. Le problème est la langue change avec succès seulement dans ma MainWindow, et aussi bien dans d'autres Windows. Qu'est-ce que je fais mal?
Set langue func dans MainWindow (edit: MainWindow.cs):WPF - Changement de langue uniquement dans MainWindow?

/*set language*/ 
    private void SetLanguageDictionary() 
    { 
     ResourceDictionary dict = new ResourceDictionary(); 
     if (Properties.Settings.Default.Language.Equals("en")) //english was set 
     { 
      dict.Source = new Uri("\\res\\enDictionary.xaml", UriKind.Relative); 
     } 
     else //otherwise - hebrew as default lang. 
     { 
      dict.Source = new Uri("\\res\\hebDictionary.xaml", UriKind.Relative); 
     } 
     //add required dictionary to the MergedDictionaries 
     Resources.MergedDictionaries.Add(dict); 
    } 

Un petit exemple de l'un des dictionnaires [ils sont fixés de manière symétrique, si elle compte]:

<ResourceDictionary 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="clr-namespace:UI_WPF" 
xmlns:system="clr-namespace:System;assembly=mscorlib"> 
<system:String x:Key="employees">Employees</system:String> 
<system:String x:Key="employers">Employers</system:String> 
<system:String x:Key="contracts">Contracts</system:String> </ResourceDictionary> 
+0

il n'y a pas assez d'informations, si le dictionnaire n'est pas ajouté son impossible de l'utiliser. cela signifie quelque part que vous fusionnez le dictionnaire anglais qui cause ce problème. –

Répondre

1

Vous ne nous avez pas indiqué où la méthode SetLanguageDictionary() est définie, mais si vous souhaitez appliquer les ressources globalement, vous pouvez fusionner ResourceDictionary dans le global Application.Current.Resources:

Application.Current.Resources.MergedDictionaries.Add(dict); 
+0

C'est tout! Merci [et autres qui ont aidé aussi!], Le SetLanguageDictionary() a été défini dans MainWindow.cs (comme édité), et toute l'application devait être affectée. – Yair

1

vous savez pourquoi les changements de langue dans MainWindow seulement? parce que quand vous appelez SetLanguageDictionary() seulement MainWindow actualisera (recharger), et c'est pourquoi les étiquettes et les textes changeront. Afin de changer la langue dans une autre fenêtre, vous devez les actualiser - les recharger à nouveau - et pendant le processus de rechargement, le contenu et les étiquettes seront mis à jour.

vous pouvez appeler autre fenêtre de MainWindow comme ci-dessous

window win = new window(); 
//then 
win.AnyMethodyou_want(); 

new window() rechargera la fenêtre à nouveau, puis la langue peut être modifiée.

Je l'ai utilisé de cette façon avant ..