如何从模态窗口调用主WPF窗口的方法?

如何从模态窗口调用主WPF窗口的方法?

(事实上​​,当我关闭一些模型窗口时,我想启动MainWindow.xaml.cs的一些计时器。)

谢谢!

您可以做的是在打开第二个窗口之前将主窗口指定为其所有者,然后从模态窗口调用Owner属性,将其转换为MainWindow对象,您将能够执行该方法。

// Code in main window ModalWindow window = new ModalWindow(); window.Owner = this; window.ShowDialog() //Code on the modal window var myObject = this.Owner as MainWindow; myObject.MyMethod(); // Call your method here. 
 public class ModalWindow : Window { private MainWindow _parent; public ModalWindow(MainWindow parent) { _parent = parent; Owner = parent; } void CallParent() { _parent.Call(); } } 

我建议这种模式是代码味道。

如果您的目标是将信息从模态传递到父级,则最好在模式窗口上公开属性,并在关闭后读取这些值并执行父级中所需的任何操作。

如果您的目标是将信息从父级传递给模态,则在调用ShowDialog().之前将其传递给构造函数或公共属性ShowDialog().

有很多方法可以做到这一点。

您可以重载模式窗口的构造函数,以便可以传入对该函数或主窗口的引用。 或者,向该窗口添加属性。

您还可以在主窗口代码中显示模态窗口的下一行启动计时器。

  • 如果这个模型窗口将从MainWindow打开,就像这样说

    modalWindow.ShowDialog()

    只需在此调用后添加代码就足够了,它将在模式窗口关闭后执行。

  • 如果模式窗口是从其他地方打开的,但在关闭时应该在完全不相关的部分上运行代码,可以使用例如Commands或RelayCommand (直接委托调用的种类)。

希望这可以帮助。

您可以将事件处理程序附加到模式对话框的“关闭”事件,该事件将在对话框触发此事件时在主程序中执行。