У меня есть набор стилей и кистей, определенных в ResourceDictionary, которые я загружаю как MergedDictionary в XAML моего элемента управления верхнего уровня:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/MyAssembly;component/Styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
Я пытаюсь дополнительно заменить некоторые из этих стилей и кистей, если в XAP существует другой файл XAML с его собственным ResourceDictionary. Я пытаюсь объединить этот словарь во время выполнения перед вызовом InitializeComponent () в моем пользовательском элементе управления. Я использую следующий код, чтобы попытаться сделать это:
public static class StyleLoader
{
public static void MergeStyle(string xamlUri)
{
try
{
XDocument xaml = XDocument.Load(xamlUri);
ResourceDictionary rd = XamlReader.Load(xaml.ToString()) as ResourceDictionary;
Application.Current.Resources.MergedDictionaries.Add(rd);
}
catch (XmlException ex)
{
// if the file doesn't exist, we can't add it
}
}
}
Словарь ресурсов из необязательного файла загружается нормально и объединяется, однако мой первоначальный набор стилей, кажется, всегда переопределяет это. Если я закомментирую объединенный словарь в XAML и просто загружу их во время выполнения, чтобы он работал идеально:
StyleLoader.MergeStyle("/MyAssembly;component/Styles.xaml");
StyleLoader.MergeStyle("BrushReplacements.xaml");
InitializeComponent();
Моя проблема с этим решением заключается в том, что без стилей по умолчанию в XAML я не могу открыть проект в Blend. У кого-нибудь есть идеи по поводу решения, которое сохранит мои стили по умолчанию известными Blend, но позволит мне при желании переопределить их во время выполнения с помощью динамически загружаемого словаря ресурсов? Спасибо!