Reputation: 6149
There is function in which a new window is opened and shown. I want to put a condition onto the closure of that window. I wrote what I want as a pseudo-code below.
private void fnc (object sender, RoutedEventArgs e)
{
MyWindow nw = new MyWindow();
nw.Show();
// Pseudo code: When (nw.Close()) {do something}
}
Upvotes: 0
Views: 56
Reputation: 43001
private void fnc (object sender, RoutedEventArgs e)
{
MyWindow nw = new MyWindow();
nw.Show();
// inline
nw.Closed += (s1, e1) => Debug.WriteLine("Closed");
// or
nw.Closed += (s1, e1) =>
{
Debug.WriteLine("Closed");
};
// or
w.Closed += OnWindowClosed;
}
private void OnWindowClosed(object s, EventArgs e)
{
Debug.WriteLine("Closed");
}
Upvotes: 4
Reputation: 67115
You want to use ShowDialog(). This will make your code wait until the new window returns.
private void fnc (object sender, RoutedEventArgs e)
{
MyWindow nw = new MyWindow();
nw.ShowDialog();
//Do something when nw returns
}
Or, if you do not want to freeze up your parent window, then you will have to attach to the Window.Closed
private void fnc (object sender, RoutedEventArgs e)
{
MyWindow nw = new MyWindow();
nw.Closed += nw_Closed;
nw.Show();
}
private void new_Closed(object sender, CancelEventArgs e)
{
//Do Something
}
You could use an inline delegate using lambda expressions if you do not have a method already prepared, also:
private void fnc (object sender, RoutedEventArgs e)
{
MyWindow nw = new MyWindow();
nw.Closed += (sender, cancelEventArgs) =>
{
//Do Something
};
nw.Show();
}
Upvotes: 1