4

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

  • 主窗口
  • 窗口1
  • 登录

我必须考虑情况,在第一个中一切正常,但在第二个中我得到一个空引用异常。

  1. 第一个场景:App.xaml 配置为启动窗口为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配置为启动窗口为登录窗口。登录代码:

private void button1_Click(object sender, RoutedEventArgs e)
        {
        var window=new MainWindow();
        window.Show();
        this.Close();
        }

在这种情况下,当我单击 Window1 中的按钮时,会为 obj 引发空引用异常。

这两种情况的初始化有什么区别MainWindow导致第二种情况出现异常,我该如何克服它?

4

2 回答 2

5

那么,Window启动应用程序时第一个打开的窗口,将成为调用时返回的窗口Application.Current.MainWindow

在你的情况下,那是Login,但Window1你期望它是MainWindow,这是错误的。由于Login已关闭,您将返回 null,并且应用程序崩溃。

要解决此问题,您必须制作MainWindowMainWindow :-)

你可以这样Login做:

var window = new MainWindow();
Application.Current.MainWindow = window;
window.Show();
this.Close();
于 2013-03-26T16:09:46.867 回答
0

方案 2 中的this.Close()登录窗口将关闭应用程序,因为这是在 app.xaml 文件中作为启动窗口指向的窗口。请参阅MainWindow 属性

MainWindow 自动设置为引用要在 AppDomain 中实例化的第一个 Window 对象。

在第一种情况下,您不会关闭 MainWindow,因此应用程序会继续。在第二个中,您关闭登录窗口,以便应用程序退出。

在第一种情况下,您没有显示用户被转发到 window1 的位置。查看该代码也会有所帮助。

于 2013-03-22T19:09:36.717 回答