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

本文关键字:应用程序 MainWindow 构造函数 WPF 何编辑 编辑 | 更新日期: 2023-09-27 18:31:16

我的主窗口需要订阅来自对象的一些事件。在创建主窗口之前初始化对象。我想通过它的构造函数将这个对象传递给主窗口。

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

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

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

如何将此对象传递到我的主窗口?或者 MainWindow 构造函数是否打算充当整个程序的"主"?

如何编辑 WPF 应用程序的 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。