如何传播 StateChanged 事件

How to propagate the StateChanged event

我有一个 child window 必须在另一个主要的之上。 我不想将 child 放在 TopMost 上,因为用户可能想检查其他 windows 上的数据。 简而言之,child 必须跟随 maximize/minimize 事件作为 parent 主要事件

主要最小化--->Child最小化
主最大化--->Child最大化

要做到这一点,我在主体中定义了:

this.StateChanged += MainWindow_StateChanged;

在那

public static event EventHandler OnMainWindowStateChanged;

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

逻辑应该是:

主要window主要class--->主要window引擎class---->childwindow

先放几个名字吧:

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。

显然,如果有更好的方法来实现结果,我将不胜感激

感谢您的帮助

ADD:MainWindow 对 CWorkflowEditor 不可见。因此,我尝试通过接口传递 EventHAndler,但这也不起作用。

传递事件处理程序似乎存在一些问题,但由于事件处理程序是静态的,因此这样做会更容易:

MainWindow.OnMainWindowStateChanged += MainWindow_StateChanged;

实现如下

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

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

启动 Child window 时将 Owner 设置为 Main Window。

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