簡體   English   中英

如何傳播 StateChanged 事件

[英]How to propagate the StateChanged event

我有一個孩子 window 必須在另一個是主要的之上。 我不想將孩子放在TopMost中,因為用戶可能想要檢查其他 windows 上的數據。 簡而言之,孩子必須遵循最大化/最小化事件作為父母主要事件

主最小化--->子最小化
主最大化--->子最大化

為此,我主要定義了:

this.StateChanged += MainWindow_StateChanged;

並且在那

public static event EventHandler OnMainWindowStateChanged;

private void MainWindow_StateChanged(object sender, EventArgs e)
{
    OnMainWindowStateChanged?.Invoke(sender,e);
}

邏輯應該是:

Main window main class ---> Main window engine class ----> child window

給它一些名字:

public MainWindow()
{
    this.StateChanged += MainWindow_StateChanged;

    //call to the engine
    m_Designer = new CWorkFlowEditor(this, App.IsDeployment, OnMainWindowStateChanged);
}

...

//In the engine:

public EventHandler OnMainWindowStateChanged;

public CWorkFlowEditor(object parent, bool IsDeployment, EventHandler _OnMainWindowStateChanged)
{
    OnMainWindowStateChanged = _OnMainWindowStateChanged;
}

...

// Finally, when I want to create the final child window:

    wndPluginConfigurator = new Window() {};
    OnMainWindowStateChanged += MainWindow_StateChanged;
    wndPluginConfigurator.ShowDialog();
}

private void MainWindow_StateChanged(object sender, EventArgs e)
{
    Console.Beep();
}

所以事實是,對於上面的 OnMainWindowStateChanged 事件,這個事件永遠不會被調用,總是 null。 那是因為 OnMainWindowStateChanged 也總是 null。

在此處輸入圖像描述

顯然,如果有更好的方法來實現結果,我將非常感謝您的解釋

感謝您的幫助

添加: MainWindow 對 CWorkflowEditor 不可見。 因此,我嘗試使用接口傳遞 EventHAndler,但這也不起作用。

達到以下目的

主最小化--->子最小化

主最大化--->子最大化

在啟動子 window 時,將所有者設置為主 Window。

Window childwindow = new Window childwindow.Owner = MainWindow childwindow.Show()

傳遞您的事件處理程序似乎存在一些問題,但由於事件處理程序是 static,因此這樣做肯定會更容易:

MainWindow.OnMainWindowStateChanged += MainWindow_StateChanged;

暫無
暫無

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

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