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

时间:2012-04-15 22:01:26

标签: c# wpf

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

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

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

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

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

2 个答案:

答案 0 :(得分: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);
}

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()
{

}

我更喜欢chain我的constructors,但这当然不是一种要求。

答案 1 :(得分:2)

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