2017-01-29 6 views
0

Ich habe in meinem Projekt eine Sprachauswahloption programmiert, die MergedDictionaries und Projekteinstellungen verwendet. Das Problem ist die Sprache ändert sich erfolgreich nur in meinem MainWindow und nicht in anderen Windows sowie. Was mache ich falsch?
Set-Sprache func in Mainwindow (edit: MainWindow.cs):WPF - Sprachänderungen nur in 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); 
    } 

Ein kleines Beispiel eines der Wörterbücher [sie sind symmetrisch gesetzt, wenn es darauf ankommt]:

<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

gibt es nicht genug Informationen, wenn Wörterbuch nicht hinzugefügt ist es unmöglich, es zu verwenden. Das bedeutet, dass Sie irgendwo das englische Wörterbuch zusammenführen, das dieses Problem verursacht. –

Antwort

1

Sie haben uns nicht mitgeteilt, wo die SetLanguageDictionary() -Methode definiert ist, aber wenn Sie die Ressourcen global anwenden möchten, können Sie das ResourceDictionary in die globale Application.Current.Resources zusammenführen:

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

Das war's! Danke [und anderen, die auch geholfen haben!], Das SetLanguageDictionary() wurde in MainWindow.cs (wie bearbeitet) gesetzt, und die gesamte Anwendung musste betroffen sein. – Yair

1

Sie wissen, warum die Sprache nur in MainWindow geändert wird? denn wenn Sie SetLanguageDictionary() aufrufen, wird MainWindow nur aktualisieren (neu laden), und das, warum Etiketten und Texte ändern. Um die Sprache in einem anderen Fenster zu ändern, müssen Sie sie aktualisieren - sie erneut laden - und während des Neuladens werden Inhalte und Beschriftungen aktualisiert.

Sie wie andere Fenster von Mainwindow aufrufen können unter

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

new window() wieder Fenster neu geladen wird, dann kann die Sprache geändert werden.

Ich habe diesen Weg zuvor verwendet ..

Verwandte Themen