如何编辑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。