我在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;
}
}
}
答案 0 :(得分:0)
我在语言资源词典中有5个其他键,其键与使用的主题相同。更改了密钥名称,它再次有效。