如何使用WPF用户控件关闭父窗口

假设我有两个WPF窗口:window_One和window_Two。

  • window_One有一个按钮。 单击此按钮将打开window_Two。
  • window_Two包含一个用户控件。
    • 该用户控件有一个关闭window_Two的按钮。

我该如何实现这种情况?

在您创建的自定义控件内。 您可以在按钮事件单击中访问父窗口。

通过使用可视化树:

var myWindow = (Window)VisualParent.GetSelfAndAncestors().FirstOrDefault(a => a is Window); myWindow.Close(); 

或简单地说:

 var myWindow = Window.GetWindow(this); myWindow.Close(); 

当然,另一种选择是创建一个自定义事件,显示“MyButtonClicked”,然后让托管UserControl的窗口监听此事件,当事件被触发时,关闭当前窗口。

干杯!

您可以尝试使用EventAggregator在不同的ViewModel上实现此事件驱动的逻辑。

http://www.codeproject.com/Articles/355473/Prism-EventAggregator-Sample

我们实现了这个以关闭Window2从Window2打开,但它应该适用于任何场景,如果你将这些代码部分放在适当的区域,从任何地方关闭任何窗口:

创建一个存储Window对象的类,以及一个将其关闭的函数:

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 } } } 

在父窗口(要关闭的窗口 – 在这种情况下为Window2?)中,在其onload事件中,将其Window对象设置为CloseWindow.WinObject

 CloseWindow.WinObject = (Window)this; 

然后,在子的onload事件中(或者,在OP的情况下,在Window2的用户控件的按钮事件中),让它执行CloseParent()函数:

 if (CloseWindow.WinObject != null) CloseWindow.CloseParent();