Я использовал стандартный подход к темам в своем приложении 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;
}
}
}
Хм ... если я добавлю языковой ресурс в объединенную коллекцию словарей после создания видеомодуля mainwindow, возможно, это будет причиной? NVM ... пытался сделать это, прежде чем не повезло. – bl4kh4k