В проекте Budget встала задача поменять стиль контрола WinForms при смене стиля в главной форме, написанной на WPF. WinForms UserControl встроен в WPF форму с помощью WindowsFormsHost и я не смог найти способа обратиться к методу  WinForms UserControl-а из кода WPF.

Простейший, но универсальный брокер команд для этой цели оказался самым простым рабочим решением.

				
					public class CommandBroker
{
    public static event Action<int> 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();
} 
				
			

Наверно странно, но это работает.

Универсальный брокер команд

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.