【问题标题】:How to propagate the StateChanged event如何传播 StateChanged 事件
【发布时间】: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


【解决方案1】:

要达到以下目的

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

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

在启动子窗口时,将所有者设置为主窗口。

意味着 Window childwindow = new Window childwindow.Owner = MainWindow childwindow.Show()

【讨论】:

  • 我知道我可能会因此被禁止,但让我表达我对这个解决方案的感激之情。我已经使用了数千次其他方式,而你的方式则更容易和更清洁。伙计,你绝对是我一直以来的英雄!
【解决方案2】:

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

MainWindow.OnMainWindowStateChanged += MainWindow_StateChanged;

【讨论】:

  • 谢谢,但在 CWorkFlowEditor 中看不到静态的 MainWindow,但这对 MainWindow 不起作用。
猜你喜欢
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 2011-11-05
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多