Tuesday, March 9, 2010

Show multiple Windows at startup in WPF

When you create a WPF application, your App.xaml looks like this. As you can see from this XAML code, the StartupUri is set to Window1.xaml. That means, when your application runs, Window1.xaml is the first Window that is shown.
<Application x:Class="WPFSample.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="Window1.xaml"
             >
    <Application.Resources>
        
    </Application.Resources>
</Application>
Now let's say, you have one more window called SecondWindow.xaml. You want both of these Windows to be shown when the application starts.
This can be achieved by calling SecondWindow on the application startup event. To write the startup event handler, I add Startup="App_Startup" to App.xaml.
<Application x:Class="WPFSample.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="Window1.xaml"
             Startup="App_Startup">
    <Application.Resources>
        
    </Application.Resources>
</Application>

Now I write this event handler in the App class and create an instance of SecondWindow, set its position by using Top and Left properties and call its Show method to make it visible.
  public partial class App : Application
    {
        void App_Startup(object sender, StartupEventArgs e)
        {
            SecondWindow mainWindow = new SecondWindow();
            mainWindow.Top = 100;
            mainWindow.Left = 400;
            mainWindow.Show();
        }
    }