WinForms для WPF - Как мы доберемся отсюда? - PullRequest
13 голосов
/ 11 августа 2010

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

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

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

1008 *Лучшая идея, которую мы получили, - преобразовать приложение оболочки в WPF, а затем разместить внутри него пользовательские элементы управления WinForms.Мы подумали, что со временем сможем преобразовать пользовательские элементы управления, связав эти изменения с инициативами, которые имеют достаточную ценность для бизнеса для поддержки дополнительной работы.Я обеспокоен тем, насколько хорошо работает взаимодействие и как оно повлияет на производительность.Я также обеспокоен тем, как мы переходим к новому взгляду на приложение.Было бы странно, чтобы приложение оболочки выглядело притягательно, а затем внутри него были размещены старые пользовательские элементы управления серого линкора, а также странно создавать приложение оболочки в WPF и делать его похожим на WinForms.* Если одна из Caliburn, Prism или другой подобной структуры облегчит переход, мы были бы открыты для изучения этих вариантов.

Ответы [ 2 ]

11 голосов
/ 11 августа 2010

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

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

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

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

4 голосов
/ 11 августа 2010

Отличный вопрос, в настоящее время большая часть работы в 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Преобразователь форм в Windows Presentation Foundation: http://www.spiderwan.com/spiderwan/ConvertWinFormToWPF/WinFormToWPF.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...