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

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

但是我无法弄清楚MainWindow构造函数的调用位置。 或者,我尝试通过MainWindow的成员函数传递对象,但app.MainWindow在调用app.Run()之前为null 。 在调用app.Run()之后,代码在程序终止之前不会返回。

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

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

如何将此对象传递给MainWindow? 或者MainWindow构造函数是否用作整个程序的“Main”?

你可以这样做。

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

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

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

OnStartup我们可以实例化我们的MainWindow并显示它。

 protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); MainWindow mw = new MainWindow(); mw.Show(); } 

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

App.xaml.cs

 protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); MainWindow mw = new MainWindow(5); mw.Show(); } 

MainWindow.xaml.cs

 public MainWindow() { InitializeComponent(); } public MainWindow(int number) : base() { } 

我更喜欢链接我的构造函数 ,但它当然不是任何方式的要求。

您可以通过在XAML本身中声明它来将对象设置为MainWindow的DataContext。 (例如,如果您尝试创建ViewModel)。 除此之外,WPF将以您无法控制的方式创建实例。 您可以将自己的代码放在App类中以创建和显示窗口,并从App.xaml中删除StartupUri。