We implemented this to close Window1 from Window2 getting opened, but it should work in any scenario to close any window from anywhere if you place these code parts in their appropriate areas:
Create a class that stores a Window
object, and a function that will close it:
CloseWindow.cs
public static class CloseWindow
{
public static Window WinObject;
public static void CloseParent()
{
try
{
((Window)WinObject).Close();
}
catch (Exception e)
{
string value = e.Message.ToString(); // do whatever with this
}
}
}
In the parent window (window you want to close - Window2, in this case?), in its onload event, set its Window
object equal to CloseWindow.WinObject
:
CloseWindow.WinObject = (Window)this;
Then, in the child's onload event (or, in the case of the OP, in Window2's User Control's button event), have it perform the CloseParent()
function:
if (CloseWindow.WinObject != null)
CloseWindow.CloseParent();
it should work in any scenario to close any window from anywhere if you place these code parts in their appropriate areas
. I can't than you enough for sharing your suggestion here. I tried many suggestions including the accepted answer of this post. But none of them work. I've a MS Office VSTO add-in where I have two WPF User Controls. Both are windows (Parent p) and its child c. I was able to close p from c using your code. Earlier I had spent all day struggling to get it work with no success. Many thanks toyou
andSO
. – Outbrave