Can Of Code

Tag Archives: App.Current.Windows

Some Simple WPF Tips and Tricks

Today its been raining all day, so its been the perfect excuse to do some more WPF practice. Below i compiled a small list of rather useful snippets of WPF related code which have helped me out.

1. Closing all other WPF Windows when closing a main window

Normally in an application your have a main WPF window that does some essential functionality. An example could be your web browser. The browser window is the main window and you may have an extra window which you can manage your bookmarks.

A quick and easy way i found to do this was create an event handler for the “Closing” event for the main window:

Closing="Window_Closing"

 

In the event handler we do this:

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
       foreach (Window win in App.Current.Windows)
       {
            if (win != this)
            {
                 win.Close();
            }
       }
}

 

The real gem here is the App.Current.Windows collection, which does what it says on the tin and has a collection of all the windows that have been created in your application. An important part of the snippet above is that we make sure to not close the Window that the code belongs to otherwise you get an Exception, trust me i tried it!

2.  Open an Existing instance of a WPF Window instead of a new Instance

Picture the scene, your creating an address book application and to add a new contact you have set it to bring up a new Add Contact Window. Once you finish you WPF application and release it out in the wild you get a angry email from Timmy, a frustrated user. For some reason hes got 53 instances of the Add Contact Window open!

Now to keep poor Timmy happy what you need to do is before opening a new instance of your WPF Window you want to make sure that none are already open.

And using the same magic as above you do the following:

foreach(Window win in App.Current.Windows)
{
    if (win.GetType() == typeof(propertiesWindow))
    {
        win.Show();
        win.Focus();
        return;
    }
}

 

What we are doing is looping through the collection of WPF Windows within your application and then checking if any of the windows are of the type we are wanting to open. If it does find one with the same type it will show the Window to the screen, if not it will do nothing.

To quote “Simples”.

3. WPF Visibility Property

Before i started learning the wonders of WPF, i worked with WinForms. With WinForms, life was simple, a Form or Component was either Visible = true or Visible = false. Along comes WPF stomping all over WinForms and worst of all forcing its three states of visibility on us!

After i found out what that third state was, i was willing to forgive WPF because its pretty handy. the third state is:

usrAddBtn.Visibility = System.Windows.Visibility.Collapsed;

 

Collapsed makes the WPF Element not only invisible but doesn’t reserve the space within the Parent Element. What does this mean in the real world? well it means that you could collapse a Panel and place a new Panel in its placed. This means that instead of creating new WPF Windows for settings pages for example,  you can reuse the space of your main Window.

Posted in c#, Software, WPF | Tagged , , , , | 1 Comment