如何编辑WPF应用程序的MainWindow构造函数?

err*_*404 16 c# wpf

我的mainWindow需要订阅一个对象的一些事件.在创建MainWindow之前初始化对象.我想通过它的构造函数将此对象传递给mainWindow.

但是我无法弄清楚MainWindow构造函数的调用位置.可替换地我试图经由主窗口的成员函数来传递对象,但app.MainWindownullapp.Run()被调用.在app.Run()调用之后,代码在程序终止之前不会返回.

另一个可能性是将对象存储在静态类中并具有MainWindow访问权限,但这似乎不必要地复杂化.

我意识到我可以在MainWindow构造函数中创建对象,但这意味着必须在那里放置很多其他代码,几乎整个Main函数.

如何将此对象传递给我的MainWindow?或者MainWindow构造函数是否可以作为整个程序的"Main"?

ean*_*son 24

你可以这样做.

首先进入App.xaml并删除此行StartupUri="MainWindow.xaml"以防止WPF自动显示MainWindow.

接下来右键单击App.xaml并选择View Code打开App.xaml.cs.在这个文件里面我们需要覆盖这个OnStartup事件.

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);
}
Run Code Online (Sandbox Code Playgroud)

在里面OnStartup我们可以实例化我们MainWindow并展示它.

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    MainWindow mw = new MainWindow();
    mw.Show();
}
Run Code Online (Sandbox Code Playgroud)

现在我们可以使用它来加载Constructor我们可以用来传递更多信息的替代方案.

App.xaml.cs

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    MainWindow mw = new MainWindow(5);
    mw.Show();
}
Run Code Online (Sandbox Code Playgroud)

MainWindow.xaml.cs

public MainWindow()
{
    InitializeComponent();
}

public MainWindow(int number) : base()
{

}
Run Code Online (Sandbox Code Playgroud)

我宁愿我的构造函数,但它当然以任何方式不作要求.