Какие большие препятствия нужно преодолеть при переходе с Winforms на WPF?
Я занимаюсь разработкой приложений для Winforms на C# уже несколько лет и был заинтересован в продвижении будущей разработки к WPF, в основном из-за положительных моментов, которые я слышал об этом. Но мне интересно, с какими трудностями пришлось столкнуться другим людям при переходе на WPF. Был ли существенный удар по вашей производительности или какие-то конкретные проблемы, которые вы считаете сложными?
8 ответов
Я не уверен, что могу дать вам только одно препятствие, потому что это полный уход от WinForms. Я предлагаю получить WPF Unamashed Адама Натана, забыть все, что вы знаете о создании пользовательских интерфейсов с любой предыдущей технологией (Winforms, MFC, Java) и начать все сначала.
Если вы попытаетесь сделать это любым другим способом, это вызовет полное разочарование.
ETA: причина, по которой я говорю просто начинать с нуля, в том, что иногда легче выучить новые концепции, если вы идете с чистого листа. В прошлом я обнаружил, что я могу быть моим худшим врагом, когда дело доходит до изучения чего-то нового, если я пытаюсь донести знания от технологии до технологии (например, думая, что использование веб-сервисов asmx в течение многих лет мешает мне читать первую пару главы книги WCF).
В моем, по общему признанию, ограниченном опыте работы с WPF, большие препятствия включают полный пересмотр моей ментальной модели того, как создаются пользовательские интерфейсы, и новую терминологию, которая должна быть изучена в результате этого. Впрочем, может быть, другим легче приспособиться к модели. Я вижу, как кто-то из лучших практик в мире Интернета нашел бы этот переход намного более естественным.
Это определенно сильно повлияло на мою производительность (настолько значительную, что мне пока не нравится идея пойти к своему работодателю и сказать "позвольте мне делать это с WPF вместо Winforms"). Я не думаю, что я никогда не доберусь до этого, но мне нужно развить дополнительный комфорт с помощью этой практики в свое личное время.
Я не сталкивался с какими-то конкретными проблемами, которые мне показались более сложными, чем другие. Я полагаю, что WPF Unleashed Адама Натана упоминался в другом месте, и это, безусловно, стоит прочитать. Я также слышал хорошие вещи о книге Чарльза Петцольда, хотя лично я не могу ручаться за это.
На веб-сайте Microsoft Learning есть полезное введение, которое, я считаю, доступно бесплатно, если у вас есть учетная запись Microsoft Passport https://www.microsoftelearning.com/eLearning/courseDetail.aspx?courseId=85488
- Вы не можете отключить сглаживание.
- Вашим пользователям нужна Vista или XP SP2 с.net 3.x framework.
- Если вы хотите использовать winforms, знайте о воздушном пространстве (одно решение для D3D здесь).
Это основные проблемы для меня. Кроме этого, я все для этого, его путь больше, чем выглядит.
Если в приложении WinForms определена правильная архитектура объектной модели (больше похоже на архитектуру модели MVC), я думаю, что миграция пользовательского интерфейса в WPF не займет много времени. WPF организовал свои визуальные элементы иерархически (VisualTree), а RoutedEvents и RoutedCommands - совершенно новые концепции в WPF. и, очевидно, есть еще такие вещи, как DataTemplate/Controltemplate, все они находятся на уровне XAML. Все это делает очень мощный и простой способ для достижения отличного пользовательского опыта.Поэтому я хочу сказать, что вы можете ожидать, что только ваша объектная модель может быть повторно использована (с некоторыми изменениями) в WPF, а все остальное в проекте Winforms должно быть отброшено. Конечно, все другие слои не нуждаются в модификации (Comunication Layer/DataLayer)
Я в одной лодке. Я так долго программировал с использованием winforms. Теперь я решил, что пойду изучать WPF и начну все делать с ним. Самым сложным для меня является привыкание к использованию XAML в основном для пользовательского интерфейса, а не для кода на C#, и многие свойства в WPF отличаются. (IE - чтобы изменить текст метки, вы должны изменить свойство Content). Поэтому моя самая большая проблема - вытащить голову из winforms и полностью изменить ее мышление.
Даже с 20-летним опытом я обнаружил, что у WPF крутая кривая обучения. Я пытался сделать свой последний проект с использованием WPF, но отсутствие встроенных элементов управления (например, NumericUpDown) и проблемы с получением DataBinding для работы с бизнес-объектом вынудили меня вернуться к Winforms для этого проекта, но я надеюсь сделать будущие проекты с Это. Почти весь код, который я написал (против того, что сгенерировал дизайнер), можно было использовать повторно, когда я переключался между WPF и Winforms.
Ну, для меня это был тот факт, что элементы управления в WPF ведут себя несколько иначе, чем элементы управления в WPF (например, когда речь идет о позиционировании в форме). Вы должны понимать разницу как можно скорее, чтобы использовать ее успешно и продуктивно.