2012-05-09 5 views
0

Я использовал стандартный подход к темам в своем приложении WPF и использовал динамический источник для его изменения во время выполнения.Словарь ресурсов для языков и языков

Это сработало.

Теперь у меня есть поддержка языков (английский, испанский), но когда это установлено, динамический ресурс больше не работает для темы. Если я устанавливаю элемент управления на статический ресурс, то тема работает, но затем я теряю влияние на его изменение во время выполнения.

Heres код, который был добавлен для поддержки языка, но я в замешательстве, почему он прекратил работать так, как я этого хочу.

App.xaml.cs вызывает это: SetLanguage (LocalePath (CultureInfo.CurrentCulture.Name));

/// <summary> 
    /// Get the locale path for the resource dictionary. 
    /// </summary> 
    /// <param name="language"></param> 
    /// <returns></returns> 
    private string LocalePath(string language) 
    { 
     string file = language + ".xaml"; 

     return Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"Utilities\Resources\Locales\", file); 
    } 

    /// <summary> 
    /// Set the language using the defined resource file. 
    /// </summary> 
    /// <param name="file"></param> 
    private void SetLanguage(string file) 
    { 
     if (File.Exists(file)) 
     { 
      var languageDictionary = new ResourceDictionary(); 
      languageDictionary.Source = new Uri(file); 

      int dictionaryID = -1; 

      for (int i = 0; i < Resources.MergedDictionaries.Count; i++) 
      { 
       var mergedDictionary = Resources.MergedDictionaries[i]; 

       if (mergedDictionary.Contains("ResourceDictionaryName")) 
       { 
        if (mergedDictionary["ResourceDictionaryName"].ToString().StartsWith("Locale-")) 
        { 
         dictionaryID = i; 
         break; 
        } 
       } 
      } 

      if (dictionaryID == -1) 
      { 
       Resources.MergedDictionaries.Add(languageDictionary); 
      } 
      else 
      { 
       Resources.MergedDictionaries[dictionaryID] = languageDictionary; 
      } 
     } 
    } 
+0

Хм ... если я добавлю языковой ресурс в объединенную коллекцию словарей после создания видеомодуля mainwindow, возможно, это будет причиной? NVM ... пытался сделать это, прежде чем не повезло. – bl4kh4k

ответ

0

У меня было еще 5 ключей в словарях ресурса языка с тем же ключом, что и используемая тема. Изменено имя ключа, и он снова работает.

Смежные вопросы