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



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

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

问题是,当我尝试在启动时加载不同的皮肤(使用App.xaml.cs构造函数加载最后使用的ResourceDictionary皮肤(时,我发现Application.Resources中设置的ResourceDictionary会覆盖此设置,并恢复到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();
}

最新更新