如何在启动时删除 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
皮肤)我发现 ResourceDictionary
在 Application.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();
}
我在 App.xaml
文件中声明了一个 ResourceDictionary
,如下所示:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Skins/DefaultSkin.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
问题是当我尝试在启动时加载不同的皮肤时(使用 App.xaml.cs
构造函数加载上次使用的 ResourceDictionary
皮肤)我发现 ResourceDictionary
在 Application.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();
}