带有空引用异常的WPF项目

时间:2013-03-22 18:55:59

标签: c# wpf nullreferenceexception

我有一个WPF项目,我正在使用多个WPF窗口。 我的WPF Windows是:

  • 主窗口
  • 窗口1
  • 登录

我必须采用案例场景,在第一个案例中一切正常但在第二个案例中我得到一个空引用异常。

  1. 第一个场景: App.xaml配置为启动窗口为MainWindow
  2. 当用户点击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的初始化有什么不同,我该如何克服它?

2 个答案:

答案 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的位置。查看代码也会很有帮助。