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

时间:2018-07-19 11:00:19

标签: c# wpf resourcedictionary skinning

我在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引用在设计时都会丢失。如何在设计时保留此引用,但在运行时将其删除才能覆盖我的皮肤选择?

1 个答案:

答案 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();
}
相关问题