![]() |
Модераторы: gambit, Partizan |
![]() ![]() ![]() |
|
Walker |
|
||||||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 23.10.2006 Репутация: 3 Всего: 16 |
Поскольку, на данный момент, на Винграде отсутствует раздел, посвящённый платформе .net 3.0/3.5, я помещаю эту статью в WinForms, как наиболее близкую к разработке графического интерфейса. Когда соответствующий раздел будет открыт, а произойдёт это уже, вероятно, в скором времени, я попрошу модераторов перенести эту статью туда.
Сейчас, наверное, уже не найти прикладного программиста, незнакомого, хотя бы отдалённо, с концепцией .net. Кинутый Microsoft’ом в 2000-м году снежный ком, двигаясь в сторону композиционного программирования, разросся до весьма крупных размеров. Правда, за счёт существенного подталкивания со стороны самого MS. ![]() Windows Presentation Foundation; Windows Workflow Foundation; Windows Communication Foundation. Изменения коснулись не только платформы. Так в C# и некоторых других языках .net появилась поддержка синтаксиса SQL-like запросов к коллекциям объектов (поддержка LINQ), анонимные свойства, лямбда-выражения и маршрутизируемые события. Соответственно, для реализации всех вышеперечисленных новшеств были внесены изменения и в компиляторы и в саму студию. Сегодня мы поговорим о WPF, а в следующей статье рассмотрим остальные новшества.. Итак, Windows Presentation Foundation. Новая концепия построения графического интерфейса, призванная заменить Windows Forms. Последняя представляла собой расширенный .net API к контролам, использовавшимся на протяжении всей истории существования Windows. Отрисовка и функционал интерфейса базировались на user32.dll, тормозной GDI и приторможенной GDI+. ![]() Библиотеки WPF высокоуровневые, и, как водится, кучу верификационного кода уже написали разработчики MS. Так, например, окошки с населяющими его элементами независимы от разрешения экрана. Теперь размеры проставляются в относительных единицах (device-independet units). Это является гарантией того, что при воспроизведении изображения на любом устройстве визуализации от ЖК монитора до проектора изображение будет пропорциональным и занимать такую область экрана, которая планировалась изначально. Новичок, не имеющий представления о продвинутой графике, способен ваять приложения, по меньшей мере, не уступающие WinForms. Более того, в WPF перенесено большинство знакомых контролов, включающих прежний функционал и вдобавок реализующие новые интерфейсы. Для облегчения синтаксиса инициализации полей экземляров классов на базе XML был разработан язык разметки XAML. Таким образом, реализуется модель декларативного программирования – работа с объектом разделена на два файла. В одном на языке разметки описана его “внешность” – установлены значения свойств, объявлена подписка на события, а во втором осуществляется эксплуатация функционала объекта на языке приложения. Файл XAML компилятором XAML транслируется в бинарный BAML, который встраивается в виде ресурса в dll или exe. Таким образом, редактируя XAML-файл, собирая и подключая, мы можем влиять на “внешность” объекта, не затрагивая внутренней логики его использования в приложении. Применительно к разработке графического интерфейса, его использование, вдобавок, означает облегчение разработки скинов, изменение композиции элементов, и, самое главное – возможно вообще перепоручить внешность приложения профессиональным дизайнерам. XAML вполне логичен и хорошо структурирован для того, чтобы можно было написать его генератор. Генератор подшивается к дизайнерской программе и тогда возможен ревёрсинг – дизайнер рисует внешность приложения сразу в том виде, в каком хочет его видеть, с учётом всех правил дизайна и психологии пользовательского интерфейса, накладывает цветовые маски, блики, зеркальные отражения, поворачивает элементы; он не заботится о языке – файл XAML разметки генерируется программой, а затем программистом включается в приложение. Когда работаете в дизайнере WPF Visual Studio, начните относиться к XAML, с точки зрения эксплуатации PropertyGrid. Так его, на мой взгляд, проще понять через призму разработчика. Обратите внимание, что по сути
и
значат одно и тоже. В тэги мы заключаем класс, объект которого хотим создать, задаём значения простых свойств элементарного типа через указание значений атрибутам – вызов конструктора и инициализация в одном флаконе. Если для установки значения какого-либо свойства необходимо использовать неэлементарный объект, который предстоит создать в куче с использованием ключевого слова new – строим для атрибута отдельный узел. Так для установки цвета фона, нам нужно создать объект типа Brush или производный от него. Вот так описание легко расширяется. Естественно, средой осуществляется проверка и приведение типов. Значение должно быть того же типа, что и свойство, описываемое в атрибуте. Между открывающим и закрывающим тэгами вносим содержимое контрола - значение свойства Content. (Для нашей кнопки – это надпись “Hello!”) . Обратите внимание – Content имеет тип object. Содержимым кнопки может являться объект другого класса – другой контрол. Т.е. контролы могут легко встраиваться друг в друга, образуя каскады. TreeView создаёт набор из узлов не типа TreeNode, а из узлов ItemsCollection, куда может входить опять же что угодно и т.д. Для того, чтобы обращаться к контролу из программного кода, необходимо установить значение атрибута Name, определённого в пространстве имён http://schemas.microsoft.com/winfx/2006/xaml. Установка значения этого атрибута равносильна объявлению переменной типа, который мы описываем.
Обратите внимание – код может ничего не знать ни о расположении объекта, ни об использующейся цветовой гамме, ни, даже о качественном составе. Приложение знает только о том, что у него есть кнопка, дерево, текстовое поле, поле для рисования, выстроенные хоть в ряд, хоть друг в друге, хоть перевёрнутые с ног на голову – без разницы. Поэтому, если у вас был написан плейер
Вдруг прибежал неожиданно начальник и сказал, что видео должно играть в самой кнопке, а кнопку можно было таскать по всему плейеру и менять её как угодно в размерах, Вы говорите: “Нет проблем!” и пишите новую инструкцию разметки:
Всё! Видео встроено в кнопку, но при этом кнопка осталась кнопкой, а видео – видео(‘м ![]() О WPF можно сказать ещё много хорошего – во-первых, введена поддержка стилей. Таким образом, закладывается основа хорошего тона – опишите заранее шаблоны и потом только привязывайте их к элементам. Во-вторых, поддержка концепции команд. Означает это то, что Вы можете определить команду – например, запись в файл или печать на принтер, реализовать её код один раз, а затем только привязывать её к активным элементам пользовательского интерфейса. А ещё WPF реализует концепцию маршрутизируемых событий и много других интересностей. Тем не менее, описание было бы совсем не полным, если не упомянуть о Silverlight, плагин для которого под наш любимый браузер настойчиво рекомендует скачать Майкрософ при посещении их сайта. МС позиционирует SilverLight, как аналог флэш следующего поколения. По сути – это аналогия нового, динамичного интерфейса, но под web. Кто был прошлой осенью на “днях разработчика” – должны помнить ролик, демонстрирующий puzzle-film. ВидеоРолик разбивается на части. В каждом фрагменте продолжает играть кусок клипа. Пользователь мышкой должен из всех этих кусков собрать клип обратно. Вот такой краткий обзор возможностей новой технологии. А мы совсем не коснулись анимации, воспроизведения звука и видео, а также построения объёмного пользовательского интерфейса. Но если эта статья найдёт положительный отклик, и Вам интересно будет продолжение, я буду по мере изучения выкладывать уроки по WPF, описывающих применение наиболее интересных фич. Поскольку сам ещё нахожусь в стадии освоения той технологии, то буду очень рад совместному изучению каких-то вопросов. Если у Вас имеются знания, противоречащие моим – поправляйте. Так, например, первым уроком мы с Вами можем попробовать разобраться в синтаксисе XAML. Для наших задач вполне хватит дизайнера студии. Чем он мне не нравится – не хватает описания элементов списка, открывающихся IntelliSense. Приходится дополнительно проверять тип и читать описание либо в MSDN, либо создавая код в cs-файле. Кому же нужен изысканный интерфейс, при написании которого генерируется миллион строк XAML-кода – смотрите в сторону Expression Blend и других визуальных редакторов. На момент написания этой статьи я не знаю ни одного свободного инструмента, хотя сам бы с большим удовольствием принял участие в реализации XAML-дизайнера. Может открыть проект на Винграде? Что почитать: WPF: url=http://www.amazon.com/Pro-WPF-Windows-Presentation-Foundation/dp/1590597826]Matthew MacDonald. Pro WPF.[/url] Видел, что эта книга вышла уже на русском языке. VS2008 и .net: Andrew Troelsen: Pro C# 2008 and the .NET 3.5 Platform, Fourth Edition Кстати, никто не знает – займётся ли Винград переводом этой книги, и кто войдёт в творческую группу? Остаётся добавить, что .net framework 3.0 включён в Windows Vista, 3.5 – в Visual Studio 2008, которую опять же можно найти в свободной редакции VS2008 Express Edition. Прошу заметить, что в VS2008C++ EE теперь включён WinAPI SDK, и его теперь не требуется больше подключать дополнительно. P.S. Совет дня. ![]() Удачи в освоении! До новых встреч! -------------------- "От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..." |
||||||||||||
|
|||||||||||||
HellMasterHaiL |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 9.8.2006 Где: Россия, МО, г. Юб илейный Репутация: нет Всего: 1 |
да, впф - очень интересная технология, с нетерпением буду ждать новых статей, пеши исчо \=-)))
|
|||
|
||||
Walker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 23.10.2006 Репутация: 3 Всего: 16 |
Спасибо!
![]() С удовольствием буду выкладывать обучалки и находки. -------------------- "От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..." |
|||
|
||||
flex21 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 18.5.2007 Репутация: нет Всего: нет |
Статься понравилась. Замечательно, буду ждать ещё
![]() |
|||
|
||||
andrew_sh |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 12.6.2007 Репутация: нет Всего: нет |
Присоединяюсь к вышесказанному.
![]() С нетерпением буду ждать продолжения !!! |
|||
|
||||
Горынч |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 17.12.2006 Репутация: нет Всего: нет |
Согласен тема клевая. Заказал книгу WPF: Windows Presentation Foundation в .NET 3.0 для профессионалов
Мэтью Мак-Дональд. Жду. Хочу вот ссылку дать. http://www.thevista.ru/list.php?c=articles1101 Неплохая подборка статей по WPF на русском . ;) Может автор их полистает и напишет что то новое или материал интересней подаст. |
|||
|
||||
Real |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 507 Регистрация: 9.11.2007 Репутация: нет Всего: -1 |
Очень интересно!!!
|
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |