Как удалить App.xaml ResourceDictionary при запуске?

У меня есть ResourceDictionary объявлено в App.xaml файл как ниже:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Skins/DefaultSkin.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Проблема заключается в том, что при попытке загрузить другой скин при запуске (используя App.xaml.cs конструктор для загрузки последнего использованного ResourceDictionary кожа) Я считаю, что ResourceDictionary установить в Application.Resources переопределяет это и возвращается к файлу DefaultSkin.xaml - даже когда я использую Application.Current.Resources.MergedDictionaries.Clear(); перед выбором необходимого скина.

Мое приложение работает отлично, когда я удаляю ResourceDictionary от Application.Resources - но тогда все ссылки на xaml теряются во время разработки. Как я могу сохранить эту ссылку во время разработки, но удалить ее во время выполнения, прежде чем она сможет отменить мой выбор скина?

1 ответ

Решение

Переопределить OnStartup метод в App.xaml.cs:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        Resources.MergedDictionaries.Clear();
        //...
    }
}

Если вы хотите очистить MergedDictionaries в конструкторе, вы должны сделать это после того, как вы вызвали InitializeComponent():

public App()
{
    InitializeComponent();
    Resources.MergedDictionaries.Clear();
}
Другие вопросы по тегам