我有一个WPF项目,我正在使用多个WPF窗口。 我的WPF Windows是:
我必须采用案例场景,在第一个案例中一切正常但在第二个案例中我得到一个空引用异常。
MainWindow
。当用户点击MainWindow上的Button时,他在Window1中被转发,我有以下代码:
MainWindow obj=(MainWindow)Application.Current.MainWindow;
private void button1_Click(object sender, RoutedEventArgs e)
{
obj.checkBox1.IsChecked = false;
}
2.第二种情景: App.xaml配置为启动窗口为Login Window。 登录代码:
private void button1_Click(object sender, RoutedEventArgs e)
{
var window=new MainWindow();
window.Show();
this.Close();
}
在这种情况下,当我单击Window1中的按钮时,会抛出obj的空引用异常。
在这两种导致第二种情况中的异常的情况下,MainWindow
的初始化有什么不同,我该如何克服它?
答案 0 :(得分:5)
嗯,启动应用程序时打开的第一个Window
将成为您在致电Application.Current.MainWindow
时获得的窗口。
在您的情况下,这是Login
,但在Window1
中,您希望它是MainWindow
,这是错误的。由于Login
已关闭,因此您将返回null,并且应用程序崩溃。
要解决此问题,您必须将MainWindow
设为MainWindow: - )
你可以在Login
中这样做:
var window = new MainWindow();
Application.Current.MainWindow = window;
window.Show();
this.Close();
答案 1 :(得分:0)
方案2中“登录”窗口中的this.Close()
将关闭应用程序,因为这是在app.xaml文件中指向的窗口作为启动窗口。请参阅MainWindow property
MainWindow会自动设置为对要在AppDomain中实例化的第一个Window对象的引用。
在第一个场景中,您不关闭MainWindow,以便应用程序继续。在第二个中,您关闭“登录”窗口,以便退出应用程序。
在第一个场景中,您没有显示用户转发到window1的位置。查看代码也会很有帮助。