How do I edit the MainWindow constructor of a WPF application?

You could set the object as the DataContext of the MainWindow by declaring it in the XAML itself. (If you are trying to create a ViewModel, for instance). Other than that, WPF will create the instance in a way you can't control. You could put your own code in the App class to create and display the window, and remove the StartupUri from App.xaml.


You could do it like this.

First go into App.xaml and remove this line StartupUri="MainWindow.xaml" to prevent WPF from automatically showing the MainWindow.

Next right click on App.xaml and choose View Code to open up App.xaml.cs. Inside this file we need to to override the OnStartup event.

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

Inside OnStartup we can then instantiate our MainWindow and show it.

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

    MainWindow mw = new MainWindow();
    mw.Show();
}

And now we can use this to load an alternative Constructor that we can use to pass on more information.

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

}

I prefer to chain my constructors, but it's of course not a requirement by any means.

Tags:

C#

Wpf