Как распространить событие StateChanged - PullRequest
0 голосов
/ 04 мая 2020

У меня есть дочернее окно, которое должно быть поверх другого, которое является основным. Я не хочу указывать дочерний элемент как TopMost, так как пользователь может захотеть проверить данные для другого windows. Короче говоря, ребенок должен следовать за тем, чтобы максимизировать / минимизировать события как основной родительский

Основной минимизировать ---> Минимизировать дочерний *
Основной развернуть ---> Максимизировать дочерний *

Делать что я определил в основном:

this.StateChanged += MainWindow_StateChanged;

и в этом

public static event EventHandler OnMainWindowStateChanged;

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

Лог c должен быть:

Главный класс главного окна --- > Класс движка главного окна ----> дочернее окно

Чтобы поставить несколько имен, это:

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 также всегда равно нулю.

enter image description here

Очевидно, что если есть лучший способ достичь результата, и я бы будьте очень благодарны за объяснение

Спасибо за помощь

ДОБАВИТЬ: Главное окно не видно CWorkflowEditor. Поэтому я попытался передать EventHAndler через интерфейс, но это тоже не сработало.

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Для достижения следующих значений

Основное сведение ---> Дочернее сведение

Основное сведение ---> Дочернее сведение

При запуске дочернего окна установите для владельца значение Главное окно.

Средство Window childwindow = new Window childwindow.Owner = MainWindow childwindow.Show()

0 голосов
/ 05 мая 2020

Кажется, есть некоторая проблема с передачей вашего обработчика событий, но так как обработчик событий имеет статус c, конечно, вместо этого будет легче сделать это:

MainWindow.OnMainWindowStateChanged += MainWindow_StateChanged;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...