如何编辑 WPF 应用程序的 MainWindow 构造函数
本文关键字:应用程序 MainWindow 构造函数 WPF 何编辑 编辑 | 更新日期: 2023-09-27 18:31:16
我的主窗口需要订阅来自对象的一些事件。在创建主窗口之前初始化对象。我想通过它的构造函数将这个对象传递给主窗口。
但是,我无法弄清楚从哪里调用 MainWindow 构造函数。或者,我尝试通过 MainWindow 的成员函数传递对象,但在调用app.Run()
之前null
app.MainWindow
。调用 app.Run()
后,代码在程序终止之前不会返回。
另一种可能性是将对象存储在静态类中并具有 MainWindow 访问权限,但这似乎不必要地复杂。
我意识到我可以在 MainWindow 构造函数中创建对象,但这意味着还必须在那里放置许多其他代码,几乎是整个 Main 函数。
如何将此对象传递到我的主窗口?或者 MainWindow 构造函数是否打算充当整个程序的"主"?
这样做。
首先进入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
。
应用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。 (例如,如果您尝试创建视图模型)。 除此之外,WPF 将以您无法控制的方式创建实例。 可以将自己的代码放在 App 类中以创建和显示窗口,并从 App.xaml 中删除 StartupUri。