在Application_Startup方法中创建的WPF窗口是空白的。

8

我在一个项目中有一个带有XAML文件和相关C#代码的WPF窗口。如果我在App.xaml中设置"StartupUri=MainWindow.xaml",则当我启动应用程序时,窗口会按预期打开。

然而,我希望我的应用程序能够接受命令行参数,然后决定是否打开GUI界面。因此,我在我的App.xaml文件中设置了"Startup=Application_Startup",如下所示:

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        if (e.Args.Length > 1)
        {
            //do automated tasks
        }
        else
        {
            //open ui

           MainWindow window = new MainWindow();
            this.MainWindow = window;

            window.Show();
        }
    }

当我运行这段代码时,显示的窗口完全是空白的。

可能是WPF命令行的重复问题。 - Kevin Nacios
2个回答

10

添加window.InitializeComponent()似乎是解决方法:

            MainWindow window = new MainWindow();
            Application.Current.MainWindow = window;
            window.InitializeComponent();
            window.Show();

通常我喜欢对为什么某事能够成功或者失败进行一些解释。但是在这种情况下,我毫无头绪。我看到网络上的示例都没有包括InitializeComponent,然而我产生了与你一样的完全相同的错误(没有检查参数的事件)。


默认情况下,MainWindow构造函数中不是会自动调用InitializeComponent方法吗? - Avram Tudor
3
你可能刚刚从MainWindow类的构造函数中删除了InitializeComponent。这个方法是在设计器生成的代码中(你可能会看到MainWindow.g.cs文件)运行代码所必需的。 - Charleh
啊哈!是的,我一定从构造函数中删除了InitializeComponent()。将其添加回去解决了问题。有人能解释一下为什么在使用StartupUri时它不起作用吗? - Eric Anastas

0
我创建了一个示例应用程序,并删除了StartupUri,将启动设置为您提供的方法。一切似乎都按预期工作,窗口的内容被显示出来,因此,正如Daniel所提到的,您可能在MainWindow构造函数中缺少对InitializeComponent方法的调用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接