假设我有两个WPF窗口:window_One和window_Two。
我如何实现这种情况?
答案 0 :(得分:14)
在您创建的自定义控件中。您可以在按钮事件单击中访问父窗口。
使用可视化树:
var myWindow = (Window)VisualParent.GetSelfAndAncestors().FirstOrDefault(a => a is Window);
myWindow.Close();
或简单地说:
var myWindow = Window.GetWindow(this);
myWindow.Close();
当然,另一种选择是创建一个自定义事件,显示“MyButtonClicked”,然后让托管UserControl的窗口监听此事件,当事件被触发时,关闭当前窗口。
干杯!
答案 1 :(得分:0)
您可以尝试使用EventAggregator在不同的ViewModel上实现此事件驱动的逻辑。
http://www.codeproject.com/Articles/355473/Prism-EventAggregator-Sample
答案 2 :(得分:0)
我们实现了这个以关闭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();