Переход с Windows Forms на WPF

113

В течение долгого времени я застрял в разработке Windows Forms (начал с VB6 и продолжил до C # .NET 4.5), и я почти достиг предела возможностей Windows Forms, как с использованием чистого .NET. и специальные эффекты с помощью собственного кода.

Я пытался изучить WPF и XAML, но застрял в новом конструкторе WPF. Это действительно кажется очень сложным в использовании по сравнению с конструктором Windows Forms.

Я хочу знать, есть ли альтернативы конструктору .NET WPF, которые больше подходят для разработчиков Windows Forms?

Мэтью Лейтон
источник
7
Обычно я даже не использую дизайнер, за исключением проверки того, соответствует ли общий макет тому, что я ожидал; в конце концов, я пишу все вручную в XAML и / или использую Blend, когда это необходимо - хотя я не дизайнер, так что почти никогда не бывает.
Patryk wiek
Вы можете использовать Expression blend, но я не думаю, что это действительно проще, это больше для дизайнеров, чем для разработчиков. ИМО. Обычно я просто выключаю предварительный просмотр и работаю с xml.
BlackICE
5
Пользоваться несложно, просто не привыкли. Самое большое препятствие, которое необходимо преодолеть, - это смена парадигмы между двумя технологиями. Возьмите себе хорошую книгу по XAML, как только вы привыкнете к XAML, вы даже больше не будете использовать конструктор - вы будете вводить XAML напрямую.
slugster
3
@slugster, я действительно удивился этому. То же самое произошло с HTML ... Раньше я создавал пользовательский интерфейс с помощью Dreamweaver, а теперь я кодирую HTML вручную
Мэтью Лейтон

Ответы:

175

Мне нравится вести блог о статьях для начинающих по WPF, и есть несколько, в частности, которые могут вам помочь:

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

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

Это противоположно WinForms, где вы создаете свое приложение из объектов пользовательского интерфейса, а затем предоставляете им необходимые данные.

Из-за этого конструктор на самом деле не так часто используется, поскольку компоненты вашего приложения создаются в коде, а конструктор нужен только для рисования удобного интерфейса, отражающего ваши классы данных (обычно ModelsиViewModels )

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

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

Рэйчел
источник
14
Полностью согласен с @Rachel. Самая важная реализация в свете WPF - понять, что пользовательский интерфейс не является данными, и действовать соответственно.
Федерико Берасатеги
2
@Rachel - просто для игры в адвоката дьявола: начиная с пользовательского интерфейса (какие кнопки, текстовые поля и т. Д. Появляются в окне) помогает сфокусировать приложение на том, что вы хотите сделать. Остальное - это просто детали реализации того, как вы хотите это сделать.
Asaf
3
@HighCore взгляните на stackoverflow.com/questions/982978/mvvm-for-winforms, и вам придется признать, что Winforms - это просто компонент представления / пользовательского интерфейса, в котором бизнес-объекты могут быть привязаны к пользовательским элементам управления. Хорошо: WPF больше подходит для MVVM, но, тем не менее, Winforms также может работать в таком шаблоне проектирования. И, как утверждает Рэйчел, «это противоположность WinForms, где вы создаете свое приложение из объектов пользовательского интерфейса, а затем предоставляете им необходимые данные». Хотя это так неправда. Я всегда думаю, по крайней мере, на основе данных и представлений. Данные и Winforms / WPF / HTML, что угодно.
Bernoulli IT
2
Он поддерживает привязку данных, по крайней мере, на уровне ввода / изменения данных. И я подозреваю, что эти 99,9999999% разработчиков также испортят WPF. Но давайте закончим это обсуждение. WPF абсолютно более мощный / подходит для MVVM и разделения задач, но я думаю, что вы, а также Рэйчел, отталкиваете Winforms в отрицательный угол. Особенно, когда вы продолжаете использовать слова, которые используете ...
Бернулли ИТ
3
@YoupTube Вы правы, Winforms поддерживает привязку данных, и можно создавать свои собственные привязки для случаев, когда система привязки по умолчанию тоже не работает. Я написал этот ответ и свои статьи в блоге для новичков, и обычно новички думают в терминах компонентов пользовательского интерфейса, а не объектов данных. Кроме того, привязка в WinForms не всегда существовала в том состоянии, в котором она есть сейчас, поэтому многие разработчики, выросшие на WinForms или привыкшие к другим технологиям, которые не используют привязки, часто не обнаруживают этого ключевого различия при переключении. к связанной архитектуре. :)
Рэйчел
9

Хотя некоторые люди не согласны с этим, я бы также рекомендовал не использовать конструктор VS. По крайней мере, не для создания интерфейса. Если вы хотите получить первое впечатление о своей реализации, не запуская приложение, это хороший просмотрщик, по крайней мере, до тех пор, пока не используются такие сложные вещи, как Stylesи Templates. Но, IMHO, его результат перетаскивания следует использовать только в качестве прототипа и, следовательно, отбрасывать после того, как он больше не нужен.

Вот несколько причин, по которым я не могу его использовать.

  1. Дизайнер VS работает с исправлением полей и выравнивания (что обычно не требуется, если вы используете элементы управления макетом), это означает, что вам нужно коснуться многих элементов управления, если требования изменились. Если вы глубоко знакомы с XAML и механикой WPF, вы можете создавать приложения, которые можно изменять с небольшими усилиями, что касается внешнего вида.

  2. Поскольку дизайнер генерирует xaml, композиция не оптимальна, и пользовательский интерфейс может работать плохо. Я не измерял, это просто ощущение.

Гораздо лучшая альтернатива - MS Blend , хотя начало совсем не просто. Его результат перетаскивания намного лучше, чем результат дизайнера VS.
Но это довольно мощный инструмент, который помогает вам использовать довольно мощные элементы для создания современного пользовательского интерфейса. Рекомендую посетить хотя бы небольшой семинар, чтобы ознакомиться с его возможностями.

Возвращаясь к вашему вопросу, ИМХО, и я думаю, что многие люди согласятся, купите себе хорошую книгу, например, WPF Unleashed и более поздние версии, если вы хотите узнать больше о деталях, WPF Pro . Есть много функций, которые отличаются от Winforms. Вы не узнаете их ни с одним дизайнером. Думаю, это лучший подход.

Также учтите, что существует множество фреймворков и библиотек (например, MVVM light , WPFToolkit ), которые уже решают некоторые общие проблемы. Так что нет необходимости изобретать велосипед.

DHN
источник
9

Я знаю, что это старый вопрос, но для пользы всех, кто смотрит на него, я думаю, что мне следует немного исправить баланс - читая некоторые другие ответы, у меня возникает ощущение, что некоторые из них `` не используют конструктор чувство возникает из-за неправильного использования. Это руководство очень полезно для начала и отвечает на некоторые критические замечания в других сообщениях.

Например, вы можете переключиться с Winforms-подобного макета на основе полей, который используется по умолчанию, когда вы отбрасываете элемент управления, на более WPF-стиль, щелкнув правой кнопкой мыши и выбрав «Сбросить макет».

Это видео касается схожей темы.

Я по-прежнему предпочитаю конструктор VS2010 в целом - VS2013 кажется немного глючным при перетаскивании на TabItems ** (который в моем текущем проекте часто используется), но представление VS2013 Document Outline позволяет вам перемещать вещи и в этом представлении , что может быть большим плюсом.

На самом деле, чтобы получить максимальную отдачу от WPF и xaml, вам нужно достаточно свободно владеть как представлением конструктора, так и представлением xaml и переключаться между ними; Если вы избегаете дизайнера, вы упускаете то, что может вам очень помочь.

** Изменить - хотя это, кажется, было улучшено в обновлении 3 для VS 2013 и в предварительных версиях VS14, на сегодняшний день я все еще иногда получаю странное поведение.

peterG
источник
7

Прежде всего, в WPF (XAML) в Visual Studio deisgner вы всегда должны использовать код xaml для создания пользовательского интерфейса, а не перетаскивать управление! Вам нужно держать свой код в чистоте. Вы можете использовать Expression Blend, чтобы помочь вам, он более ориентирован на графику с перетаскиванием, но это не бесплатно.

Это не большая кривая обучения, но я думаю, вам следует научиться делать xaml вручную, а не искать альтернативу.

mlemay
источник
1
Drag-n-drop не вредит, хотя, если вы предпочитаете печатать, это тоже нормально. Ручной ввод никогда не является ключом к WPF.
David
3
Когда вы перетаскиваете в WPF, я часто вижу, что у вас много маржи -1200, и подобные вещи вообще не имеют смысла ... Я всегда делал это вручную, это точно лучше
mlemay
1
Это не по теме. Убедитесь, что ваша проблема обычна для всех, а не только для вас самих. Кроме того, нельзя сказать, что перетаскивание - это плохо, если у вас есть проблемы. Опора на дизайнера по-прежнему необходима, а иногда и предпочтительнее, вы можете убедиться в этом, если знаете, как выразительность приветствуется как дизайнером, так и разработчиками.
David
1
да, если вы используете смесь выражений, хорошо, вы можете это сделать, но я говорил в visual studio ...
mlemay
12
Я думаю, что советовать кому-то из Forms и запускать WPF не использовать конструктор - действительно плохая идея. Самый быстрый способ понять XAML - использовать перетаскивание и затем наблюдать за кодом.
Ucodia
7

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

  1. Если вы работаете с элементами управления пользовательского интерфейса в коде, стоящем за ним, .... значит, вы делаете это неправильно. Вам совершенно не нужно иметь дело с элементами управления пользовательским интерфейсом в исходном коде.
  2. Вам не нужен визуальный разработчик, чтобы щелкнуть по нему. Работая только с XAML, вы намного продуктивнее. Используйте Копировать / Вставить. Не верьте в свои навыки набора текста. Это избавит от многих головных болей.
  3. Думайте о XAML как о окне, которое скрывает данные. В коде позади вы меняете данные. В XAML вы определяете, как пользовательский интерфейс будет интерпретировать данные.
  4. Конвертеры потрясающие. Как только вы получите ключевое количество конвертеров, ваша производительность взлетит до небес. Они возьмут на себя роль сумасшедшего количества обработчиков событий управления, которые скрывают или изменяют размер, или что-то еще с пользовательским интерфейсом,

Это делает разработку пользовательского интерфейса увлекательной. Особенно, когда вы узнаете, как он любит подыгрывать процессам Asyc. Это действительно избавляет от многих головных болей, вызванных Winforms.

user853710
источник