如何传播 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()
我有一个 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()