Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обзор framework 3.x: WPF 
:(
    Опции темы
Walker
Дата 6.3.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 23.10.2006

Репутация: 3
Всего: 16



Поскольку, на данный момент, на Винграде отсутствует раздел, посвящённый платформе .net 3.0/3.5, я помещаю эту статью в WinForms, как наиболее близкую к разработке графического интерфейса. Когда соответствующий раздел будет открыт, а произойдёт это уже, вероятно, в скором времени, я попрошу модераторов перенести эту статью туда.

    Сейчас, наверное, уже не найти прикладного программиста, незнакомого, хотя бы отдалённо, с концепцией .net. Кинутый Microsoft’ом в 2000-м году снежный ком, двигаясь в сторону композиционного программирования, разросся до весьма крупных размеров. Правда, за счёт существенного подталкивания со стороны самого MS.smile Тем не менее, за свою практически десятилетнюю историю Фреймворк совершил уже третий прыжок, предложив разработчикам ПО три новых технологии.
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+.smile Отрисовка WPF выполяется средствами DirectX. А это означает, что продвинутую анимацию, 3D, всякие вершинные шейдеры, наложение текстур и рендеринг теперь можно использовать не только в games developing, но и в разработке дружественного пользовательского интерфейса.
Библиотеки  WPF высокоуровневые, и, как водится, кучу верификационного кода уже написали разработчики MS. Так, например, окошки с населяющими его элементами независимы от разрешения экрана. Теперь размеры проставляются в относительных единицах (device-independet units). Это является гарантией того, что при воспроизведении изображения на любом устройстве визуализации от ЖК монитора до проектора изображение будет пропорциональным и занимать такую область экрана, которая планировалась изначально. Новичок, не имеющий представления о продвинутой графике, способен ваять приложения, по меньшей мере, не уступающие WinForms. Более того, в WPF перенесено большинство знакомых контролов, включающих прежний функционал и вдобавок реализующие новые интерфейсы.
    Для облегчения синтаксиса инициализации полей экземляров классов на базе XML был разработан язык разметки XAML. Таким образом, реализуется модель декларативного программирования – работа с объектом разделена на два файла. В одном на языке разметки описана его “внешность” – установлены значения свойств, объявлена подписка на события, а во втором осуществляется эксплуатация функционала объекта на языке приложения. Файл XAML компилятором XAML транслируется в бинарный BAML, который встраивается в виде ресурса в dll или exe. Таким образом, редактируя XAML-файл, собирая и подключая, мы можем влиять на “внешность” объекта, не затрагивая внутренней логики его использования в приложении.
    Применительно к разработке графического интерфейса, его использование, вдобавок, означает облегчение разработки скинов, изменение композиции элементов, и, самое главное – возможно вообще перепоручить внешность приложения профессиональным дизайнерам. XAML вполне логичен и хорошо структурирован для того, чтобы можно было написать его генератор. Генератор подшивается к дизайнерской программе и тогда возможен ревёрсинг – дизайнер рисует внешность приложения сразу в том виде, в каком хочет его видеть, с учётом всех правил дизайна и психологии пользовательского интерфейса, накладывает цветовые маски, блики, зеркальные отражения, поворачивает элементы; он не заботится о языке – файл XAML разметки генерируется программой, а затем программистом включается в приложение.
    Когда работаете в дизайнере WPF Visual Studio, начните относиться к XAML, с точки зрения эксплуатации PropertyGrid. Так его, на мой взгляд, проще понять через призму разработчика. Обратите внимание, что по сути
Код

<Button Height="96" Width="100">
            <Button.Background>
                <LinearGradientBrush SpreadMethod="Repeat">
                    <GradientStop Color="GreenYellow" Offset="0" />
                    <GradientStop Color="Green"  Offset="1" />            
                </LinearGradientBrush>
            </Button.Background>
            Hello!
</Button>

и
Код

Button b = new Button();
b.Height = 96;
b.Width = 100;
b.Content = "Hello!";
LinearGradientBrush lgb = new LinearGradientBrush();
lgb.GradientStops.Add(new GradientStop(Colors.GreenYellow, 0));
lgb.GradientStops.Add(new GradientStop(Colors.Green, 1));
b.Background = lgb;

значат одно и тоже.
    В тэги мы заключаем класс, объект которого хотим создать, задаём значения простых свойств элементарного типа через указание значений атрибутам – вызов конструктора и инициализация в одном флаконе. Если для установки значения какого-либо свойства необходимо использовать неэлементарный объект, который предстоит создать в куче с использованием ключевого слова new – строим для атрибута отдельный узел. Так для установки цвета фона, нам нужно создать объект типа Brush или производный от него. Вот так описание легко расширяется. Естественно, средой осуществляется проверка и приведение типов. Значение должно быть того же типа, что и свойство, описываемое в атрибуте.
    Между открывающим и закрывающим тэгами вносим содержимое контрола - значение свойства Content. (Для нашей кнопки – это надпись “Hello!”) . Обратите внимание – Content имеет тип object. Содержимым кнопки может являться объект другого класса – другой контрол. Т.е. контролы могут легко встраиваться друг в друга, образуя каскады. TreeView создаёт набор из узлов не типа TreeNode, а из узлов ItemsCollection, куда может входить опять же что угодно и т.д.
Для того, чтобы обращаться к контролу из программного кода, необходимо установить значение атрибута Name, определённого в пространстве имён http://schemas.microsoft.com/winfx/2006/xaml. Установка значения этого атрибута равносильна объявлению переменной типа, который мы описываем.
Код

<TreeView Name=myTreeView />

Код

myTreeView.Items.Add(new Button());
myTreeView.Items.Add(new TextBox());
myTreeView.Items.Add(“My name is Walker”);

    Обратите внимание – код может ничего не знать ни о расположении объекта, ни об использующейся цветовой гамме, ни, даже о качественном составе. Приложение знает только о том, что у него есть кнопка, дерево, текстовое поле, поле для рисования, выстроенные хоть в ряд, хоть друг в друге, хоть перевёрнутые с ног на голову – без разницы. Поэтому, если у вас был написан плейер
Код

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>
        <MediaElement …/>
  <Button Grid.Row="1" …/>
</Grid>

Вдруг прибежал неожиданно начальник и сказал, что видео должно играть в самой кнопке, а кнопку можно было таскать по всему плейеру и менять её как угодно в размерах, Вы говорите: “Нет проблем!” и пишите новую инструкцию разметки:
Код

<InkCanvas EditingMode="Select">        
<Button Height="100" Width="100" InkCanvas.Top="20" InkCanvas.Left="20">
             <MediaElement …/>
         </Button>
</InkCanvas>

    Всё! Видео встроено в кнопку, но при этом кнопка осталась кнопкой, а видео – видео(‘мsmile)
    О 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. Совет дня.smile VS2008 позволяет разрабатывать приложения на платформах 2.0-3.5. При этом, переключиться можно прямо в процессе разработки. Для этого, в свойствах проекта на вкладке Application выберите Target Framework. Студия проверит закономерность зависимостей и выдаст соответствующие предупреждения, если вы понижаете версию платформы.

Удачи в освоении! До новых встреч!




--------------------
"От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..."
PM MAIL   Вверх
HellMasterHaiL
Дата 6.3.2008, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 9.8.2006
Где: Россия, МО, г. Юб илейный

Репутация: нет
Всего: 1



да, впф - очень интересная технология, с нетерпением буду ждать новых статей, пеши исчо \=-)))
PM MAIL ICQ   Вверх
Walker
Дата 6.3.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 23.10.2006

Репутация: 3
Всего: 16



Спасибо! smile 
С удовольствием буду выкладывать обучалки и находки.


--------------------
"От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..."
PM MAIL   Вверх
flex21
Дата 6.3.2008, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.5.2007

Репутация: нет
Всего: нет



Статься понравилась. Замечательно, буду ждать ещё smile 
PM MAIL   Вверх
andrew_sh
Дата 9.3.2008, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 12.6.2007

Репутация: нет
Всего: нет



Присоединяюсь к вышесказанному.  smile 
С нетерпением буду ждать продолжения !!!
PM MAIL   Вверх
Горынч
Дата 17.3.2008, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 17.12.2006

Репутация: нет
Всего: нет



Согласен тема клевая.  Заказал книгу WPF: Windows Presentation Foundation в .NET 3.0 для профессионалов
Мэтью Мак-Дональд. Жду. 
Хочу вот ссылку дать. http://www.thevista.ru/list.php?c=articles1101
Неплохая подборка статей по WPF на русском . ;)  Может автор их полистает и напишет что то новое или материал интересней подаст.
 
PM MAIL   Вверх
Real
Дата 18.3.2008, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 507
Регистрация: 9.11.2007

Репутация: нет
Всего: -1



Очень интересно!!!
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0772 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.