[英]How to call method of the main WPF window from the modal window?
如何從模態窗口調用主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 (直接委托調用的種類)。
希望這可以幫助。
您可以將事件處理程序附加到模式對話框的“關閉”事件,該事件將在對話框觸發此事件時在主程序中執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.