2012-05-09 14 views
0

私は私のWPFアプリケーションでテーマへの標準的なアプローチを使用して、実行時にそれを変更するdynamicresourceを使用していました。テーマと言語リソース辞書

これが働いていました。

今、私が追加した言語サポート(英語、スペイン語)が、これが設定されている場合、動的なリソースは、もは​​やテーマのために働きます。コントロールを静的リソースに設定した場合、テーマは機能しますが、実行時にテーマを変更する影響はありません。相続人

言語サポートのための追加が、私はそれが私はそれが望むように動作を停止理由として混乱していたコード。

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

うーん...メインウィンドウのビデオ・モデルを作成した後、私は合併辞書コレクションに言語リソースを追加する場合、この可能性の高い原因でしょうか? NVMは...運の前にそれをやってみました。 – bl4kh4k

答えて

0

私は、使用されているテーマと同じキーを持つ言語リソース辞書に5つの他のキーを持っていました。キー名を変更し、再度機能します。