我创建了一个从MainWindow打开的新窗口。单击此窗口中的按钮后,窗口应关闭,同时在MainWindow中触发一些事件。
我认为这很容易实现,但我不知道如何访问MainWindow方法&来自另一个窗口的字段......
任何帮助将不胜感激。谢谢! :)
答案 0 :(得分:1)
这是错误的方法......子窗口应该有一个Closed
事件,您可以为其注册处理程序。如果您确实需要在子项关闭之前从子项执行父窗口函数,那么您可以在打开它时将委托传递给子项。
答案 1 :(得分:0)
答案 2 :(得分:0)
你不需要这样做......
在子窗口中定义一个类似的事件:
public event EventHandler Closing;
在主窗口中创建此窗口时,订阅它:
Window1 wnd = new Window1();
wnd.Closing += new EventHandler(childClosing);
关闭子窗口时检查事件是否已订阅并将其抬起:
if (Closing != null) {
Closing(this, new EventArgs());
}
当然你需要在主窗口中使用childClosing方法:
private void childClosing(object sender, EvenrArgs e) {
/// do your work
}
如果您需要传回一些数据,那么您将创建一个派生自EvenrArgs的类并使用它。但是你需要一个与Eventhandler不同的委托,如:
class ClosingArgs : EventArgs {
// some property here
}
子窗口中的
delegate void ClosingEventHandler(object sender, ClosingArgs e);
和
public event ClosingEventHandler Closing;
喝彩!
答案 3 :(得分:0)
这非常简单,因为您希望在子窗口关闭时触发MainWindow中的操作,只需注册close事件:
// In the main window, whenever your start your child window (not in the constructor)
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var window = new Window();
window.Closed += new EventHandler(window_Closed);
window.ShowDialog();
}
void window_Closed(object sender, EventArgs e)
{
throw new NotImplementedException();
}
然后,当子窗口关闭时,将调用主窗口中的函数window_Closed。