Переход из Windows Forms в WPF

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

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

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

Ответ 1

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

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

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

wpf.png?w=450&h=400

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

winforms.png?w=450&h=400

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

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

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

Ответ 2

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

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

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

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

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

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

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

Ответ 3

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

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

Это видео покрывает аналогичную почву.

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

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

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

Ответ 4

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

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

Ответ 5

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

  • Если вы работаете с элементами управления пользовательского интерфейса в коде позади,... Затем вы делаете это неправильно. Вам абсолютно не нужно иметь дело с элементами управления пользовательского интерфейса в коде.
  • Вам не нужен визуальный разработчик для щелчка по нему. Вы гораздо более продуктивны, имея дело только с XAML. Используйте Копировать/Вставить. Не доверяйте своим возможностям ввода. Это сэкономит много головных болей.
  • Подумайте о XAML, как о окне, которое хранит данные. В коде позади вы меняете данные. В XAML вы определяете, как пользовательский интерфейс будет интерпретировать данные.
  • Преобразователи потрясающие. Как только вы получите ключевое количество конвертеров, ваша производительность будет ракета Sky high. Они возьмут на себя роль безумного количества обработчиков управляющих событий, которые скрывают или изменяют размер, или что-либо о пользовательском интерфейсе,

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