[英]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.