簡體   English   中英

如何從模態窗口調用主WPF窗口的方法?

[英]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()

    只需在此調用后添加代碼就足夠了,它將在模態窗口關閉后執行。

  • 如果模式窗口是從其他地方打開的,但在關閉時應該在完全不相關的部分上運行代碼,可以使用例如CommandsRelayCommand (直接委托調用的種類)。

希望這可以幫助。

您可以將事件處理程序附加到模式對話框的“關閉”事件,該事件將在對話框觸發此事件時在主程序中執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM