0

私は WPF アプリケーションのテーマに対して標準的なアプローチを使用し、動的リソースを使用して実行時にテーマを変更していました。

これはうまくいきました。

言語サポート (英語、スペイン語) を追加しましたが、これを設定すると、動的リソースがテーマに対して機能しなくなります。コントロールを静的リソースに設定すると、テーマは機能しますが、実行時に変更した影響が失われます。

言語サポートのために追加されたコードを次に示しますが、なぜ思い通りに動作しなくなったのか混乱しています。

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;
            }
        }
    }
4

1 に答える 1

0

言語リソース ディクショナリには、使用されているテーマと同じキーを持つ他の 5 つのキーがありました。キー名を変更すると、再び機能します。

于 2012-05-09T21:09:22.130 に答える