Здравствуй дорогой наш читатель. Это третья статья из серии переезда нашего ПО на кроссплатформенные рельсы. Она затронет визуальную часть продукта, а именно диалоговое окно.
В рамках первой статьи упоминалось, что данное приложение вызывается через пункт ПКМ, в связи с чем были проблемы при развертывании в разных ОС. Самое интересное заключалось не только в том, как реализовать вызов “визуальщины”, но и в том, как нам без сильных потерь реализовать диалоговое окно, которое мы сможем спокойно использовать в Linux, а возможно в дальнейшем и в Windows. Для самых нетерпеливых забегу в перёд и скажу, что в данной задаче нам помог framework Avalonia. Ну а теперь по порядку.
Мы имеем WinForms приложение, работающее, разумеется, только в Windows. Его задача - выводить диалоговое окно с небольшим количеством контролов, фактически главными из которых листбокс и кнопка.
Как раз только выходит .Net Core 3, с предположением о работе в Linux. Собираем, проверяем и ничего не получаем. В действительности в Linux не добавили визуальную часть. Ну что же, ищем другие варианты.
Самым часто встречающимся фреймворком по данному вопросу является Avalonia. Мы решили опробовать её. Взяли простейший пример, собрали в Linux, запустили и да, диалоговое оно отобразилось. Теперь дело за малым - перенести WinForms проект на Avalonia.
В качестве проекта был выбран простой шаблон Avalonia Application, при условии, что логика и DTO уже вынесены в отдельные библиотеки, шаблон MVVM здесь был бы избыточен.
Перенос дизайна основного окна с WinForms на XAML прошёл без проблем, несмотря на то, что разработчик в знакомстве с WPF ранее замечен не был.
Логика осталась практически без изменений (BackgroundWorker, файлы, DTO, ...).
Реализация окон сообщений, на первый взгляд, также проблем не вызвала.
В проекте WinForms в качестве диалогового окна сообщения использовался System.Windows.Forms.MessageBox.