如何在启动时删除 App.xaml ResourceDictionary?

How to remove App.xaml ResourceDictionary at startup?

我在 App.xaml 文件中声明了一个 ResourceDictionary,如下所示:

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

问题是当我尝试在启动时加载不同的皮肤时(使用 App.xaml.cs 构造函数加载上次使用的 ResourceDictionary 皮肤)我发现 ResourceDictionaryApplication.Resources 中设置会覆盖它并恢复到 DefaultSkin.xaml 文件 - 即使我在选择所需皮肤之前使用 Application.Current.Resources.MergedDictionaries.Clear(); 也是如此。

当我从 Application.Resources 中删除 ResourceDictionary 时,我的应用程序运行完美 - 但所有 xaml 引用在设计时都丢失了。我如何才能在设计时保留此引用,但在运行时将其删除,然后它才能覆盖我的皮肤选择?

覆盖 App.xaml.cs 中的 OnStartup 方法:

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();
}