从另一个窗口访问MainWindow

时间:2011-04-30 08:56:04

标签: c# wpf mainwindow

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

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

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

4 个答案:

答案 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。