Dharmesh Parekh
Dharmesh Parekh

Reputation: 59

Prevent to close parent window if child windows are active

I am developing multiple instance WPF application. Application has a grid in a main screen and on double click of grid row, it opens child window. It has also functionality to open multiple child windows on double click of grid row from main screen.

Can anybody help me to prevent parent window to be close if child windows are active? So user can not able to close main window if child windows are active.

Upvotes: 2

Views: 3050

Answers (4)

E-Bat
E-Bat

Reputation: 4892

Set Owner property for those childs to Main Windows:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var wnd = new Window();
    wnd.Owner = this;
    wnd.Show();
}

Then in Main Window closing event handler:

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    if (this.OwnedWindows.Count > 0)
    {
        MessageBox.Show("Child windows exists, you have to close'em first");
        e.Cancel = true;
    }
}

As a final point it could be helpful for you to know that you can get from anywhere in your code the app main windows with this:

System.Windows.Application.Current.MainWindow

So if you are using MVVM the above will help you in setting the Owner property.

Upvotes: 4

Bakri Bitar
Bakri Bitar

Reputation: 1697

You have two options:

1- You can use ShowDialog() to open the child window, but user can't interact with the parent window till the child is closed.

2- You can check all windows that are currently opened by checking

Application.Current.Windows

and then you can determine whether you want to close your window or not

Edit:

add the following event handler to your Parent.Closing event

 private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            foreach (var item  in Application.Current.Windows)
            {
                Window window = item as Window;
                if (window.Title == "YourChildWindowTitle")
                  {

                         // show some message for user to close childWindows

                        e.Cancel = true;
                         break;

                  }
            }
        }

Upvotes: 1

Steve
Steve

Reputation: 611

Attach a function to the main window's 'Closing' event, and check to see if the child window is open. if it is, set

e.cancel = true;

Upvotes: 0

DeshDeep Singh
DeshDeep Singh

Reputation: 1843

In window closing command pass that if the child window is open disable closing functionality.

Or

you what you can do is make canexecute = false when a pop up is open and closing command is triggered.

Upvotes: 0

Related Questions