WPF - 找不到应用 xaml 文件中定义的资源
WPF - Cannot find resource defined in app xaml file
嘿嘿...
我的 WPF 应用程序有一个自定义启动来显示自定义初始屏幕并做一些准备工作(例如解析参数、准备文件系统等)。为此,我覆盖了 OnStartup 方法。
App.xaml.cs
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var splash = new SplashWindow();
splash.Show();
// do some black magic
splash.Close();
var mw = new MainWindow();
mw.Show();
}
}
}
App.xaml
<Application x:Class="Example.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
ShutdownMode="OnExplicitShutdown">
<Application.Resources>
<ResourceDictionary>
<Color x:Key="Foo">#FFFFAA00</Color>
<SolidColorBrush x:Key="Bar" Color="{StaticResource Foo}" />
</ResourceDictionary>
</Application.Resources>
</Application>
但是以这种方式处理启动我无法访问 app.xaml 中定义的资源,即 MainWindow.xaml 或 Splash.xaml.
其他一些人已经遇到了同样的问题,即
按照解决方法 link 将我带到这个 Whosebug post:
建议的解决方法是定义 Application 元素的 x:Name
。但是它如何帮助我访问定义的资源呢?不幸的是 "more information" 的 link 坏了(太旧了)...
应用这个问题的公认答案甚至不能解决问题。
我正在使用 .Net Framework 7.4.2
谁能给我一些提示,我该如何解决这个问题?
干杯,谢谢 :)
=================
问题已解决...
真实世界的应用程序在实例化应用程序 class 时初始化了 MainWindow 和 SplashWindow...愚蠢的错误...
问题
SplashWindow 和 MainWindow 试图访问 App.xaml 中定义的资源。
在 App.xaml.cs 中完成了一些准备工作等。加载一些文件。但是当 App 被实例化时,它已经尝试创建 SplashWindow 和 MainWindow
的实例
public partial class App : Application
{
private readonly SplashWindow splash;
public App() {
splash = new SplashWindow(); // this cannot work, if SplashWindow has a reference to a resource defined in App
this.MainWindow = new MainWindow(); // this cannot work, if MainWindow has a reference to a resource defined in App
}
protected override void OnStartup(StartupEventArgs e) {
base.OnStartup(e);
var splash = new SplashWindow(); // yes, splash was instancied multiple times...
splash.Show();
// do some magic
splash.Close();
MainWindow.Show();
}
}
SplashScreen 和 MainWindow 的实例化导致异常,因为它们试图访问 App 中定义的资源,但 App 未完成实例化,因此无法访问对象。
在尝试重建错误时,我创建了一个更简单的应用程序,其中 MainWindow 和 SplashWindow 在 App.OnStartup(e) 中实例化,但是当调用此事件时,应用程序对象存在,因此它可以工作。
解决方案
删除字段 splash
并且不使用构造函数创建 SplashWindow 和 MainWindow
的实例
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e) {
base.OnStartup(e);
var splash = new SplashWindow(); // yes, splash was instancied multiple times...
splash.Show();
// do some magic
this.MainWindow = new MainWindow();
splash.Close();
MainWindow.Show();
}
}
感谢所有帮助我找出这个错误的人...
特别感谢@Default,是他提醒我回答这个问题:)
嘿嘿...
我的 WPF 应用程序有一个自定义启动来显示自定义初始屏幕并做一些准备工作(例如解析参数、准备文件系统等)。为此,我覆盖了 OnStartup 方法。
App.xaml.cs
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var splash = new SplashWindow();
splash.Show();
// do some black magic
splash.Close();
var mw = new MainWindow();
mw.Show();
}
}
}
App.xaml
<Application x:Class="Example.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
ShutdownMode="OnExplicitShutdown">
<Application.Resources>
<ResourceDictionary>
<Color x:Key="Foo">#FFFFAA00</Color>
<SolidColorBrush x:Key="Bar" Color="{StaticResource Foo}" />
</ResourceDictionary>
</Application.Resources>
</Application>
但是以这种方式处理启动我无法访问 app.xaml 中定义的资源,即 MainWindow.xaml 或 Splash.xaml.
其他一些人已经遇到了同样的问题,即
按照解决方法 link 将我带到这个 Whosebug post:
建议的解决方法是定义 Application 元素的 x:Name
。但是它如何帮助我访问定义的资源呢?不幸的是 "more information" 的 link 坏了(太旧了)...
应用这个问题的公认答案甚至不能解决问题。
我正在使用 .Net Framework 7.4.2
谁能给我一些提示,我该如何解决这个问题?
干杯,谢谢 :)
=================
问题已解决... 真实世界的应用程序在实例化应用程序 class 时初始化了 MainWindow 和 SplashWindow...愚蠢的错误...
问题
SplashWindow 和 MainWindow 试图访问 App.xaml 中定义的资源。
在 App.xaml.cs 中完成了一些准备工作等。加载一些文件。但是当 App 被实例化时,它已经尝试创建 SplashWindow 和 MainWindow
public partial class App : Application
{
private readonly SplashWindow splash;
public App() {
splash = new SplashWindow(); // this cannot work, if SplashWindow has a reference to a resource defined in App
this.MainWindow = new MainWindow(); // this cannot work, if MainWindow has a reference to a resource defined in App
}
protected override void OnStartup(StartupEventArgs e) {
base.OnStartup(e);
var splash = new SplashWindow(); // yes, splash was instancied multiple times...
splash.Show();
// do some magic
splash.Close();
MainWindow.Show();
}
}
SplashScreen 和 MainWindow 的实例化导致异常,因为它们试图访问 App 中定义的资源,但 App 未完成实例化,因此无法访问对象。
在尝试重建错误时,我创建了一个更简单的应用程序,其中 MainWindow 和 SplashWindow 在 App.OnStartup(e) 中实例化,但是当调用此事件时,应用程序对象存在,因此它可以工作。
解决方案
删除字段 splash
并且不使用构造函数创建 SplashWindow 和 MainWindow
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e) {
base.OnStartup(e);
var splash = new SplashWindow(); // yes, splash was instancied multiple times...
splash.Show();
// do some magic
this.MainWindow = new MainWindow();
splash.Close();
MainWindow.Show();
}
}
感谢所有帮助我找出这个错误的人...
特别感谢@Default,是他提醒我回答这个问题:)