Application.Resources - это ResourceDictionary.Загружаемый вами словарь также является ResourceDictionary.Вы можете добавить ресурсы в ResourceDictionary через Add.Вы можете перечислить ресурсы в ResourceDictionary, так как он реализует ICollection.Вы также можете запросить, существует ли ресурс, так как он реализует IDictionary.ResourceDictionary может содержать другие ResourceDictionaries в своей коллекции ResourceDictionaries: MergedDictionaries.
То, как вы хотите объединить их, зависит от нескольких вещей.Одна из тактик, которую я использовал, - это объединение на уровне ResourceDictionary, поэтому я удаляю ResourceDictionary из моего Application.Resources.MergedDictionaries, а затем добавляю загруженный ResourceDictionary, который я загрузил.Если вы хотите объединить, добавив отдельные ресурсы, которые существуют в вашем ResourceDictionary, но еще не существуют в Application.Resources, вы можете перечислить так:
void AddOrUpdate(DictionaryEntry resource)
{
// If it exists, remove it; contains checks base and merged dictionaries
if (Application.Current.Resources.Contains(resource.Key))
{
// Must try to remove from all; if it doesn't exist there is no effect
Application.Current.Resources.Remove(resource.Key);
foreach (ResourceDictionary nextDictionary in Application.Current.Resources.MergedDictionaries)
nextDictionary.Remove(resource.Key);
}
// We can now add it
Application.Current.Resources.Add(resource.Key, resource.Value);
}
void MergeMyDictionary(ResourceDictionary myResourceDictionary)
{
foreach (DictionaryEntry nextResource in myResourceDictionary)
AddOrUpdate(nextResource);
foreach (ResourceDictionary nextDictionary in myResourceDictionary.MergedDictionaries)
{
foreach (DictionaryEntry nextResource in nextDictionary)
AddOrUpdate(nextResource);
}
}