WinForms в WPF - как нам добраться отсюда?

Есть ли практический способ для нас медленно развить приложение WinForms до WPF, не создавая для себя кошмар поддержки со странными сценариями взаимодействия?

Справочная информация:

У нас есть большое приложение WinForms серого линкора, которое активно используется внутренней группой из 60-75 пользователей. Мы начинаем сталкиваться с местами, где мы могли бы увидеть некоторую выгоду от наличия приложения в WPF, но этого недостаточно, чтобы оправдать большой проект, чтобы полностью его переписать. Все экраны в приложении представляют собой автономные пользовательские элементы управления WinForms, а приложение WinForms - это просто оболочка, которая обрабатывает меню, открывает / закрывает формы, предоставляет некоторые общие вспомогательные методы и т. Д.

На данный момент это лучшая идея. нам нужно было преобразовать приложение оболочки в WPF, а затем разместить в нем пользовательские элементы управления WinForms. Мы подумали, что затем со временем сможем преобразовать пользовательские элементы управления, связав эти изменения с инициативами, имеющими достаточную ценность для бизнеса, чтобы поддержать дополнительную работу. Меня беспокоит, насколько хорошо работает взаимодействие и как оно повлияет на производительность. Меня также беспокоит, как мы переходим к новому виду приложения.Казалось бы странным, чтобы приложение оболочки выглядело шикарно, а затем внутри него размещались старые серые пользовательские элементы управления, и также кажется странным создать приложение оболочки в WPF и сделать его похожим на WinForms.

Если одна из Caliburn, Prism или другой подобной структуры упростит переход, мы будем открыты для изучения и этих вариантов.

13
задан akjoshi 12 March 2012 в 06:31
поделиться

2 ответа

Мы были в похожей ситуации и выбрали следующий путь: Вначале мы начали размещать несколько окон WPF в оболочке приложения (все еще WinForms). Конечно, была какая-то видимая разница, но мы намеренно уменьшили разницу, приглушив новые окна. Мы полагали, что к тому времени, когда мы сконвертируем оставшиеся окна / элементы управления, будет легче «обновить» до более яркого опыта, поскольку пользовательский интерфейс будет полностью WPF, и мы сможем привлечь графического дизайнера для творчества на основе XAML.

Теперь мы достигли точки, когда большинство окон являются WPF. Мы начали процесс преобразования приложения оболочки WinForms в приложение оболочки на основе WPF, в котором размещены остальные WinForms. У нас все еще есть тусклые цвета, но пользователи начали замечать разницу, и, хотя она небольшая, нашим пользователям все еще нравится постепенное положительное изменение. Не слишком долго, и мы удалим последний WinForm. Это будет момент, когда мы отпустим наших графических дизайнеров с поводка!

Что касается производительности: я, конечно, не могу сделать общих заявлений, поскольку она сильно зависит от ваших конкретных элементов управления / окон. В нашем продукте (несколько сотен окон) мы не обнаружили каких-либо серьезных проблем с производительностью, связанных с сочетанием WPF и WinForms.

Мы не рассматривали ни одну из фреймворков, поэтому, боюсь, я не могу их комментировать.

11
ответ дан 2 December 2019 в 00:17
поделиться

Отличный вопрос, в настоящее время большая часть работы в WPF связана с преобразованием старых WinForms. приложение к WPF. По моему опыту, лучший вариант - создать приложение с нуля на основе старого приложения / требований. К счастью, я участвовал в проекте, в котором мы переписали приложение с нуля, и я уверен, что это заняло меньше времени / инвестиций, чем их смешение.

Я лично считаю, что если бы мы попытались смешать эти два, это бы создало беспорядок. Другой момент заключается в том, что будет сложно разработать эффективное смешанное приложение.

В моем текущем проекте (который представляет собой огромный проект за последние 10 лет) мы конвертируем приложение модуль за модулем. К счастью для нас, наше приложение состоит из различных небольших приложений, поэтому преобразовывать их одно за другим проще.В вашем случае я бы сказал, что вы определяете области, которые можно полностью преобразовать в WPF, и начинаете создавать их в WPF, как предлагается здесь -

Windows Forms - Вопросы и ответы по взаимодействию WPF: http://windowsclient.net/learn/integration.aspx

Я бы также предложил использовать некоторые инструменты для преобразования форм Windows в 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 Конвертер Foundation: http://www.spiderwan.com/spiderwan/ConvertWinFormToWPF/WinFormToWPF.aspx

4
ответ дан 2 December 2019 в 00:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: