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