主题和语言资源词典

时间:2012-05-09 19:54:39

标签: wpf xaml

我在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;
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

我在语言资源词典中有5个其他键,其键与使用的主题相同。更改了密钥名称,它再次有效。