我创建了一个从 MainWindow 打开的新窗口。单击此窗口中的按钮后,窗口应关闭并同时触发 MainWindow 中的某些事件。
我认为这很容易实现,但我不知道如何从另一个窗口访问 MainWindow 方法和字段......
任何帮助,将不胜感激。谢谢!:)
我创建了一个从 MainWindow 打开的新窗口。单击此窗口中的按钮后,窗口应关闭并同时触发 MainWindow 中的某些事件。
我认为这很容易实现,但我不知道如何从另一个窗口访问 MainWindow 方法和字段......
任何帮助,将不胜感激。谢谢!:)
这是错误的做法......子窗口应该有一个Closed
事件,您可以为其注册处理程序。如果您确实需要在子窗口关闭之前从子窗口执行父窗口功能,那么您可以在打开子窗口时将委托传递给子窗口。
这很简单,因为您希望在子窗口关闭时触发 MainWindow 中的操作,只需注册关闭事件:
// 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。
你不需要以这种方式这样做......
在子窗口中定义一个事件,如:
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;
干杯!