WinForms to WPF - Как мы доберемся отсюда?
Есть ли практический способ для нас, чтобы медленно развить приложение WinForms в WPF, не создавая для себя кошмарной поддержки со странными сценариями взаимодействия?
Справочная информация:
У нас есть большое линкорное серое приложение WinForms, которое активно используется внутренней группой из 60-75 пользователей. Мы начинаем сталкиваться с местами, где мы можем увидеть некоторую выгоду от наличия приложения в WPF, но этого недостаточно, чтобы оправдать большой проект, чтобы полностью переписать его. Все экраны в приложении - это автономные пользовательские элементы управления WinForms, а приложение WinForms - это просто оболочка, которая обрабатывает меню, открывает / закрывает формы, предоставляет некоторые общие вспомогательные методы и т. Д.
Пока что лучшая идея, которую мы получили, - преобразовать приложение оболочки в WPF, а затем разместить внутри него пользовательские элементы управления WinForms. Мы думали, что со временем сможем преобразовать пользовательские элементы управления, связав эти изменения с инициативами, которые имеют достаточную деловую ценность для поддержки дополнительной работы. Я обеспокоен тем, насколько хорошо работает взаимодействие и как оно повлияет на производительность. Я также обеспокоен тем, как мы переходим к новому взгляду на приложение. Казалось бы странным, чтобы приложение оболочки выглядело притягательно, а затем внутри него были размещены старые пользовательские элементы управления серого линкора, а также странно создавать приложение оболочки в WPF и делать его похожим на WinForms.
Если бы одна из Caliburn, Prism или другой подобной структуры облегчила бы переход, мы были бы открыты и для изучения этих вариантов.
2 ответа
Мы оказались в аналогичной ситуации и выбрали следующий путь: в начале мы начали размещать несколько окон WPF в оболочке приложения (все еще WinForms). Конечно, была некоторая видимая разница, но мы намеренно уменьшили разницу, смягчив новые окна. Мы полагали, что к тому времени, когда мы будем преобразовывать оставшиеся окна / элементы управления, будет проще "обновить" их до более яркого опыта, поскольку пользовательский интерфейс будет полностью WPF, и мы можем задействовать графического дизайнера, который будет работать над их магией на основе XAML.
Теперь мы достигли точки, когда большинство окон WPF. Мы начали процесс преобразования приложения оболочки WinForms в приложение оболочки на основе WPF, в котором размещены остальные WinForms. Тем не менее, у нас довольно скучные цвета, но пользователи начали замечать разницу, и, хотя она невелика, нашим пользователям все еще нравятся постепенные положительные изменения. Не долго и мы удалим последнюю WinForm. Это будет момент, когда мы выпустим наших графических дизайнеров из поводка!
Что касается производительности: я, конечно, не могу сделать общее утверждение, поскольку оно сильно зависит от ваших конкретных элементов управления / окон. В нашем продукте (несколько сотен окон) мы не обнаружили существенных проблем с производительностью, связанных с сочетанием WPF и WinForms.
Мы не смотрели ни на одну из платформ, поэтому, боюсь, я не могу их комментировать.
Большой вопрос, в настоящее время большая часть работы в WPF связана с преобразованием старого приложения WinForms в WPF. Исходя из моего опыта, лучшим вариантом является создание приложения с нуля на основе старого приложения / требований. К счастью, я был частью проекта, в котором мы переписали приложение с нуля, и я уверен, что это заняло меньше времени / инвестиций, чем их совместное использование.
Я лично чувствую, что если бы мы попытались смешать их, это могло бы создать беспорядок. Другое дело, что будет сложно разработать смешанное приложение эффективно.
В моем текущем проекте (который является огромным проектом, запущенным за последние 10 лет), мы конвертируем модуль приложения для каждого модуля. К счастью для нас, наше приложение состоит из различных небольших приложений, поэтому конвертировать их по одному проще. В вашем случае я бы сказал, что вы определяете области, которые можно полностью преобразовать в WPF, и начинаете строить их в WPF, как предлагается здесь -
Windows Forms - FAQ по совместимости WPF: http://windowsclient.net/learn/integration.aspx
Я также предложил бы использовать некоторые инструменты для преобразования оконных форм в XAML(WPF); это, безусловно, поможет вам сэкономить время.
Конвертер Windows Forms в WPF: http://wf2wpf.codeplex.com/
Конвертер Windows Forms в XAML: http://www.ingeniumsoft.com/Products/WinForm2XAML/tabid/63/language/en-US/Default.aspx
Конвертер Windows Forms в Windows Presentation Foundation: http://www.spiderwan.com/spiderwan/ConvertWinFormToWPF/WinFormToWPF.aspx