我在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
中,即使在选择所需皮肤之前使用Application.Current.Resources.MergedDictionaries.Clear();
时,ResourceDictionary
中的内容也会覆盖并恢复为DefaultSkin.xaml文件。
当我从Application.Resources
中删除{{1}}时,我的应用程序运行良好-但是所有xaml引用在设计时都会丢失。如何在设计时保留此引用,但在运行时将其删除才能覆盖我的皮肤选择?
答案 0 :(得分:3)
覆盖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();
}