0

我创建了一个从 MainWindow 打开的新窗口。单击此窗口中的按钮后,窗口应关闭并同时触发 MainWindow 中的某些事件。

我认为这很容易实现,但我不知道如何从另一个窗口访问 MainWindow 方法和字段......

任何帮助,将不胜感激。谢谢!:)

4

4 回答 4

1

这是错误的做法......子窗口应该有一个Closed事件,您可以为其注册处理程序。如果您确实需要在子窗口关闭之前从子窗口执行父窗口功能,那么您可以在打开子窗口时将委托传递给子窗口。

于 2011-04-30T09:03:47.417 回答
0

使用Application.MainWindow属性

于 2011-04-30T08:59:01.420 回答
0

这很简单,因为您希望在子窗口关闭时触发 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。

于 2011-04-30T09:09:33.720 回答
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;

干杯!

于 2011-04-30T09:04:19.447 回答