В проекте Budget встала задача поменять стиль контрола WinForms при смене стиля в главной форме, написанной на WPF. WinForms UserControl встроен в WPF форму с помощью WindowsFormsHost и я не смог найти способа обратиться к методу WinForms UserControl-а из кода WPF.
Простейший, но универсальный брокер команд для этой цели оказался самым простым рабочим решением.
public class CommandBroker
{
public static event Action OnCommand;
public static void SendCommand(int cmd) => OnCommand?.Invoke(cmd);
}
В главной форме при смене стиля вызываем .
private void SetTheme(Theme devExTheme)
{
//Смена стиля основной формы
//а тут шлем команду всем подписчикам
CommandBroker.SendCommand(1);
}
В коде контролов надо подписаться на событие брокера.
CommandBroker.OnCommand += doCommand;
И реализовать обработчик.
void doCommand(int cmd)
{
if (cmd == 1) ChangeStyle();
}