【发布时间】:2020-05-04 12:17:04
【问题描述】:
我有一个子窗口必须位于另一个主窗口之上。
我不想将孩子设置为TopMost,因为用户可能想要检查其他窗口上的数据。
简而言之,孩子必须遵循作为父母主要事件的最大化/最小化事件
主最小化--->子最小化
主最大化--->子最大化
要做到这一点,我已经在 main 中定义了:
this.StateChanged += MainWindow_StateChanged;
在那个
public static event EventHandler OnMainWindowStateChanged;
private void MainWindow_StateChanged(object sender, EventArgs e)
{
OnMainWindowStateChanged?.Invoke(sender,e);
}
逻辑应该是:
主窗口主类--->主窗口引擎类---->子窗口
给它起一些名字:
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 事件总是空的。那是因为 OnMainWindowStateChanged 也始终为空。
显然,如果有更好的方法来实现结果,我将非常感谢您的解释
感谢您的帮助
添加:MainWindow 对 CWorkflowEditor 不可见。因此,我尝试通过接口传递 EventHAndler,但这也不起作用。
【问题讨论】:
-
嗯……子窗口对父窗口有强引用吗?
-
您是否考虑过在主窗口中显示用户控件而不是子窗口?您可以将其显示在主窗口内容的顶部。既然你有孩子在父母之上的要求……
标签: c# wpf windows events delegates