Search code examples
c#wpfwindow

How do I know if a WPF window is opened


In a WPF window, how do I know if it is opened?

My goal to open only 1 instance of the window at the time.

So, my pseudo code in the parent window is:

if (this.m_myWindow != null)
{
    if (this.m_myWindow.ISOPENED) return;
}

this.m_myWindow = new MyWindow();
this.m_myWindow.Show();

EDIT:

I found a solution that solves my initial problem. window.ShowDialog();

It blocks the user from opening any other window, just like a modal popup. Using this command, it is not necessary to check if the window is already open.


Solution

  • In WPF there is a collection of the open Windows in the Application class, you could make a helper method to check if the window is open.

    Here is an example that will check if any Window of a certain Type or if a Window with a certain name is open, or both.

    public static bool IsWindowOpen<T>(string name = "") where T : Window
    {
        return string.IsNullOrEmpty(name)
           ? Application.Current.Windows.OfType<T>().Any()
           : Application.Current.Windows.OfType<T>().Any(w => w.Name.Equals(name));
    }
    

    Usage:

    if (Helpers.IsWindowOpen<Window>("MyWindowName"))
    {
       // MyWindowName is open
    }
    
    if (Helpers.IsWindowOpen<MyCustomWindowType>())
    {
        // There is a MyCustomWindowType window open
    }
    
    if (Helpers.IsWindowOpen<MyCustomWindowType>("CustomWindowName"))
    {
        // There is a MyCustomWindowType window named CustomWindowName open
    }