Подтвердить что ты не робот

Как ускорить разработку WPF

Я работаю с WPF уже много месяцев. Это отличная рамка, и я могу делать фантазии, элегантные вещи, которые были бы намного сложнее с WinForms.

Однако у меня есть ощущение, что для обычных приложений типа "бизнес-бизнеса" без каких-либо особых требований пользовательского интерфейса мне все еще требуется больше времени для кодирования пользовательского интерфейса в XAML, чем для перетаскивания его в WinForms.

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

Я знаю, что могу просто забыть о "чистом XAML" и использовать графический дизайнер в Visual Studio 2008 (который просто абсолютно позиционирует все внутри огромной сетки), но я боюсь, что потеряю много преимуществ, которые XAML предлагает это сделать.

Испытывали ли вы что-то подобное? Если да, , что вы сделали, чтобы ускорить повседневную разработку WPF?

4b9b3361

Ответ 1

Что я делаю, чтобы ускорить повседневную разработку WPF:

  • Игнорируйте внешний вид и до тех пор, пока я могу. В идеале, корректировка выравниваний и полей и определение стилей - это последнее, что я делаю.

  • Используйте DockPanel перед использованием сетки и сетки перед использованием StackPanel.

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

  • Прототип в Kaxaml, закончите в Expression Blend, протестируйте в Visual Studio. Выяснение методологии для этого заняло много времени, и оно все еще очень продвинуто. Но Kaxaml отлично подходит для быстрого понимания того, как будет вести себя прототип XAML, а Blend отлично подходит для разработки визуальных эффектов и инкапсуляции в пользовательские элементы управления и стили.

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

  • Работайте на мельчайшей вещи. Это требует много дисциплины. У меня есть хороший большой XAML файл, и я решил, что мне нужно отредактировать шаблон элемента управления. Первое, что нужно сделать, - создать в нем крошечный файл XAML с этим элементом управления и отредактировать шаблон управления там. Искушение работать таким образом на месте очень сильное, так как редактирование шаблона управления является только щелчком правой кнопки мыши. Не делайте этого.

  • Даже не думайте о том, следует ли мне разработать модель представления для моего маленького одноразового приложения. Да, я должен.

  • Изучите Blend. Действительно, действительно изучите это. Узнайте, что означают все миниатюрные значки, которые окружают выбранный объект, и обратите внимание на них. (Здесь ярлык: я не устанавливал поля на эту вещь, но Blend сделал. Это ответ, возможно, на 30% моего вопроса "Что, черт возьми, сейчас делает Blend"?). Используйте интерфейс Blend, даже если я его знаю было бы быстрее отредактировать XAML вручную. Это снова вопрос дисциплины, сопротивляющийся искушению сделать это сейчас, чтобы я мог улучшить свою способность получить больше от этого позже.

Ответ 2

Это похоже на то, что "нарезанные яблоки легко сделать, но яблочный пирог лучше на вкус. Как я могу сделать яблочный пирог так же легко, как я могу нарезать яблоками?" Ну, вы можете сделать это легче, используя предварительно приготовленные корки пирога или покупку предварительно нарезанных яблок, но это никогда не будет так просто, потому что, давайте посмотрим правде в глаза, вы делаете что-то более сложное и потенциально более вкусное.

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

В противном случае единственный способ сделать его таким же простым, как и drag-and-drop WinForms, - использовать конструктор WPF с перетаскиванием.

Ответ 3

Я использую WPF уже пару лет - для оптимальной скорости я отключил дизайн-просмотр, использовал фрагменты, интенсивно интенсивно (и, конечно же, ReSharper).

И затем я делаю все просто: я решил использовать стандартную компоновку почти для всех - т.е. бит главного экрана → DockPanel, ToolBar состыкован сверху → фрагмент.

Всплывающий экран → DockPanel, ToolBar состыковался вверх, пользовательский Постоянный раздел состыковал дно (кнопки "Сохранить и отменить" ) - свойства модели просмотра → UserControl с сеткой, метками и свойствами.

Для стилизации - сначала сделайте это, когда у меня есть по крайней мере 3 экрана для каждого типа - создайте ресурсные словари для каждого типа. Определите общие стили - текстовый блок заголовка и т.д. Импортируйте ResourceDictionary на каждом экране и применяйте стили.

Примените окраску, поля, отступы и т.д. в App.Xaml с неблокированными стилями.

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

Ответ 4

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

Ответ 5

Совет по VS2010 очень хорош; его визуальный дизайнер действительно полезен, по сравнению с дизайнером VS2008 XAML, который был менее бесполезным.

Microsoft PR-машина широко использует шаблон "Model-View-ViewModel" для бизнес-приложений, до тех пор, пока они на самом деле рекомендуют вещи, которые могут тратить ваше время.

Не тратьте часы, пытаясь обучить все в XAML, если у вашей компании или клиента нет процедур, требующих этого. Если вы можете быстрее его закодировать в VB или С#, а код по-прежнему поддерживается, может быть проверен и доступен для чтения.

Не становитесь пуристом MVVM; даже Microsoft не определила соответствующий баланс для этого шаблона и даже с материалами Silverlight 4, они не придумали хороший набор инструментов для разработки или лучших практик для шаблона, хотя это уже почти пять лет с тех пор это было впервые предложено; есть еще очень веские причины отказаться от ICommand и INotifyPropertyChanged в пользу просто вызова метода на вашем ViewModel из кода. Кроме того, эксперт по WPF/Silverlight, не относящийся к Microsoft, который я слушал в последние несколько месяцев, не смог сказать: "Я еще не уверен в MVVM, я не пурист".

Найдите баланс и используйте XAML для того, что работает для вас, и С# или VB для того, что работает для вас. MS-разработчики в своих блогах любят называть XAML "разметку", а С# или VB - это "код, к сожалению". Ну, если вы печатаете его или устанавливаете, все это код, и правда в том, что все, что XAML интерпретируется, а затем превращается в С# или VB в файлы, которые вы не видите или не можете редактировать, прежде чем они будут скомпилированы, (Например, Application.g.vb создается из Application.xaml как частичный класс.)

Существуют конструкции XAML, такие как анимации и раскадровки, которые занимают много строк для размещения в XAML, но в процедурных языках может занимать только одну или две строки кода и на самом деле их легче читать, особенно если анимация реагирует на событие при определенных условиях. Делайте то, что лучше всего работает.

Кроме того, если вы кодируете и продолжаете удалять исключения во время выполнения, которые не имеют смысла, сделайте шаг назад, найдите альтернативный ответ, который позволит вам функционировать, и реализуйте его. Большинство ошибок XAML не могут быть захвачены Intellisense или компилятором. В течение нескольких недель можно столкнуться с проблемой XAML, которая может быть закодирована на С# или VB с ранним связыванием в сравнительно короткое время.

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

Ответ 6

Если вы используете VS2010, я думаю, что визуальный дизайнер для XAML теперь лучше, и я думаю, что время разработки больше соответствует разработке классических winforms.

Если вам все же нужно настроить таргетинг на .NET 3.5, вы можете установить решение для компиляции в 3.5 вместо 4.0. Это может быть хорошим вариантом для вас, если вы еще не используете VS2010.

Ответ 7

Я чувствую вашу боль... Каждый раз, когда мы добавляем новое поле в базу данных, в форме должен быть добавлен другой TextBox/ComboBox. Я обнаружил, что использование Expression Blend позволяет мне намного быстрее выложить форму. Недостатком является то, что использование Blend имеет тенденцию создавать больше xaml, чем писать его вручную, поэтому я обычно заканчиваю небольшую очистку xaml.

В конце концов, Blend - намного лучший дизайнер, чем Visual Studio (2010), поэтому гораздо быстрее выполнить ваши дизайнерские работы в Blend и разработки в VS. (только мои два цента)