2017-01-29 4 views
0

Я запрограммировал вариант выбора языка в своем проекте, используя MergedDictionaries и настройки проекта. Проблема , язык меняется успешно только в моем MainWindow и не в других Windows. Что я делаю не так?
Набор языка FUNC в MainWindow (редактирование: MainWindow.cs):WPF - изменение языка только в 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); 
    } 

Небольшой пример одного из словарей [они установлены симметрично, если это имеет значение]:

<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

информации недостаточно, если словарь не добавлен, его невозможно использовать. это означает, что где-то вы объединяете английский словарь, который вызывает эту проблему. –

ответ

1

Вы не сказали нам, где определен метод SetLanguageDictionary(), но если вы хотите применить ресурсы по всему миру, вы можете объединить ResourceDictionary в глобальный Application.Current.Resources:

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

Вот и все! Спасибо [и другим, кто тоже помог!], SetLanguageDictionary() был установлен в MainWindow.cs (как отредактирован), и все приложение необходимо было затронуть. – Yair

1

Вы знаете, почему языковые изменения только в MainWindow? потому что когда вы вызываете SetLanguageDictionary(), только MainWindow будет обновлять (перезагружать), и поэтому метки и тексты будут меняться. Чтобы изменить язык в другом окне, вам необходимо обновить их - перезагрузить их снова - и во время процесса перезагрузки содержимое и метки будут обновлены.

вы можете вызвать другое окно из MainWindow, как показано ниже

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

new window() снова перезагрузит окно, то можно изменить язык.

Я использовал этот способ раньше ..