|
Модераторы: gambit, Kefir, Partizan |
|
Kefir |
|
||||
«Hakuna Matata» Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 22 Всего: 87 |
Windows Presentation Foundation
Доброе время суток. Сегодня я собираюсь немного рассказать об одной из самых могучих библиотек для построения пользовательского интерфейса – Windows Presentation Foundation (далее WPF). Хочу заметить, что лично я ещё не видел библиотеку для GUI, которая превосходила бы WPF по возможностям. Однако, не буду более разводить демагогию и перейду к доказательной базе. XAML В первую очередь, на мой взгляд, необходимо упомянуть такую штуку, как XAML (Extensible Application Markup Language). Что это такое? А вам никогда не хотелось писать GUI так же как вы пишете HTML для веб-страничек? Мне хотелось. Всегда хотелось. Я не понимал, почему обязательно надо возиться с созданием объектов, с кучей кода, который не имеет нормальной структуры и форматирования. Так вот. Эра этих мучений наконец-то подошла к концу! С чем я всех и поздравляю.
Вот таким образом записывается окно и кнопка на нём. Это самый простой пример, который можно привести и здесь я его показал лишь для того, чтобы у вас было представление как описывается пользовательский интерфейс. На самом же деле при помощи XAML можно писать намного более сложные конструкции. Шаблоны, стили, «Lookless» контролы Что же такого мощного в WPF, что он поднял так много шума? Только XAML? Конечно, нет. Одной из отличительных черт WPF являются шаблоны и стили. Что это такое? Шаблон – это структура контрола. Для лучшей наглядности рассмотрим такую вещь, как Button. Из чего состоит обычная кнопка? Из рамки с заливкой и текста. А что если мы захотим чтобы у каждой кнопки у нашем приложении был CheckBox? Или чтобы кнопки меняли цвет при наведении на них мышкой? Сделать это проще простого – нам просто придётся отредактировать шаблон кнопки. Двумя словами – шаблоны позволяют полностью менять вид контрола, сохраняя его функциональность, а также позволяют эту функциональность расширить. Стиль – это набор установок для контрола. Для чего он нужен? Для того, чтобы можно было менять свойства множества кнопок, редактируя только один стиль. К примеру, стиль может содержать информацию об отступе (Margin), цвете фона (Background) и даже задавать шаблон. С появлением в WPF стилей и шаблонов появилось также определение «Lookless» (безликий) контрол. Это значит, что теперь контролы по сути своей являются чистой логикой. Они предоставляют некие свойства, события и методы. Однако информация о том, как они должны выглядеть на экране теперь полностью контролируется шаблонами и стилями. Анимации Думаю, никто не сможет возразить - людям надоели неподвижные, скучные интерфейсы. И один из способов этот интерфейс украсить это анимировать некоторые его элементы. Приятно, когда кнопка плавно менеят свой цвет при наведении мышки. Так вот, до WPF не было нормального способа для создания такого интерфейса. Это было реально, но муторно. Кому нравится делать анимацию высоты в цикле? Причём так, чтобы можно было его останавливать. А теперь подумайте, как это выглядит, если надо анимировать несколько обьектов. Это ведь сколько лишней работа. Но только не в WPF. Тут надо только сказать "поменяй цвет кнопки с синего на красный в течение секунды". И всё! Те, кто знакомы с Flash будут приятно удивлены (привет Timeline, привет Keyframe-ы!). 3D Ещё один из пряников WPF - возможность использования 3D в программе не увидев ни одного слова DirectX. Даже не вспомнив, что такая штука существует. Можно без всяких проблем добавить трёхмерную графику в любое место вашего приложения. Более того, всё это можно написать при помощи XAML, не написав ни строчки на C#. Хотите сделать кнопку, которая при нажатии переворачивается (в трёхмерной манере) и на её обратной стороне показывается картинка? Пожалуйста, пишите. Data Binding И наконец, привязка данных. Просто поразительно что можно сделать с его помощью. Вкратце (кто об этом не слышал) - это когда у вас есть энное количество элементов, которые вы должны показать в ListBox. "Ну можно и можно", - скажете вы - "Чего такого-то?". А я отвечу. Для начала - можно делать привязку данных опять же не написав ни строчки кода! Уже существуют RSS-клиенты, написанные на чистом XAML. Но это ещё цветочки. А среди истинных ягодок - шаблоны данных. К примеру, у вас есть класс MyImage, который содержит Source, Title, Description, Date. Вам нужно показать это в ListBox. Причём чтобы были отражены все поля. Что вы будете делать без WPF? Правильно - мучаться. А в WPF вам надо всего лишь указать шаблон данных для ListBox. Получится примерно следующее:
Всё. Мы передали ListBox-у массив обьектов. А у него определён метод того, как надо эти обьекты отображать. *** Итак, в этой заметке я показал лишь небольшую часть от нововведений WPF. Я пытался выбрать самые интересные из них. И если у вас появилось хоть какой-то интерес к этой технологии, значит я не зря потратил время. СУВ, Kefir PS первая заметка. жажду здоровой критики и замечаний. Это сообщение отредактировал(а) Kefir - 30.5.2008, 15:33 |
||||
|
|||||
-Mikle- |
|
|||
Невидимка Vingrad'а Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Лично я уже месяца три как интересуюсь. Думаю многие ленятся или боятся суваться во что-то новое, но рано или поздно, все равно придется
А так, ИМХО, статья захватывает внимание новичков. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
THandle |
|
|||
Хранитель Клуба Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: нет Всего: 372 |
Kefir, заинтриговал Буду, видимо переходить на WPF. Красивая и видимо удобная вещь Было бы интересно почитать еще заметочки. Особенно в таком стиле. Очень захватывает
|
|||
|
||||
nikitao |
|
|||
Кот-программист Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: нет Всего: 26 |
Изучаю сейчас WPF. Очень круто , ничего не скажешь , но меня не оставляет одно чувство )))
Чувствется некая незавершенность в техналогии. что то где то недоделано чуток. Тоже самое было с .NET 1.x и ко второй версии как рвз было все доведено до ума. Мне кажется в след версии WPF тоже самое будет. У вас нет такого же чувства ? -------------------- Жизнь - печальная штука. |
|||
|
||||
Idsa |
|
|||
Эксперт Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 2 Всего: 62 |
Нет У меня обратные чувства от обилия новых плюшек. Мелкие косяки, конечно, есть. Самый существенный из них - отсутствие некоторых важных контролов (но достойные бесплатные сторонние компоненты уже есть). А так потихоньку фиксятся недочеты: в .NET 3.5 пофиксились недочеты .NET 3.0, а в .NET 3.5 SP1 соответственно фиксятся недочеты .NET 3.5. |
|||
|
||||
NightmareZ |
|
|||
[хакер] Профиль Группа: Участник Сообщений: 699 Регистрация: 10.8.2006 Репутация: нет Всего: 13 |
-------------------- NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш Ely-Art.ru - наша маленькая домашняя арт-студия mugcraft.ru - кружки на любой вкус |
|||
|
||||
VirmarY |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 9.11.2009 Где: Гродно Репутация: нет Всего: нет |
статья для этого и предназначена =) многие боятся новых технологий. а такие вот статьи преподносят основные возможности на блюдечке и интригуют новичка. автору зачет. Вообще если вы хотите написать какую-то программу с оригинальным внешним видом - без WPF не обойтись |
|||
|
||||
WolfTheGrey |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 207 Регистрация: 21.1.2009 Где: forum.vingrad.ru Репутация: 2 Всего: 2 |
Я может не туда пишу, но что делать с мобильными устройствами???
Уже появилась Windows Phone 7. Она хоть сервелат поддерживает? или писать проги на карявом Compact Framevork ? |
|||
|
||||
Kefir |
|
|||
«Hakuna Matata» Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 22 Всего: 87 |
WolfTheGrey, WP7 поддерживает Silverlight и XNA
|
|||
|
||||
ДобренькийПапаша |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 2 Всего: 7 |
Перечитываю мануал по WPF - готовлюсь к сдаче экзамена на сертификат. Нет, всё-таки не оставляет ощущение нездоровой "навороченности". Эта часть framework'а (WPF) совершенно неочевидна и нетривиальна как основная часть framework'а (которая тоже наворочена, но является более ясной). Новичок не сможет работать с WPF. Да, сможет решать тривиальные задачи, но если ему придётся капнуть глубже - он будет в шоке от такой инкапсуляции запутанной. Да, сейчас мне ясно как работают зависимые свойства и маршрутизируемые события, но тем у кого нет хотя бы года опыта разработки (по минимуму) понять эти вещи (понять достаточно глубоко, а не на уровне "где-то что-то слышал как-то было дело") будет нереально.
В целом, хочется сказать, что так плодить framework'и нельзя. Надо дать сообществу программистов пообкатать эти технологии. В России только-только начинают использовать WPF, WCF - а мы уже в ожидании пятой версии платформы (есть предположение, что к концу следующего года уже может выйти релиз .NET 5.0). Мне видится, что консервативность Java в этом плане более правильна. Ну хорошо, пусть .NET 4.0 мы получили, но на этом надо остановиться на некоторое время (ну года на три, но не на один и не на два). Кто что скажет по этому поводу? -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
Kefir |
|
|||
«Hakuna Matata» Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 22 Всего: 87 |
Не согласен я. WPF не сложный. Точнее так - он не более сложен, чем любые другие фреймворки в которые надо вливаться и понимать их суть. Везде нужен опыт и книжки для доводки своих знаний. Это процесс изучения. Это нормально. И вообще - как вы себе представляете такую красивую систему без тех же самых dep properties и подобного? Нельзя же просто сказать "Знаете, давайте откажемся от половины плюшек в WPF и вырежем механизм шаблонов. А то что-то слишком сложно получается".
Ну а развитие самой платформы радует меня просто чрезвычайно. Тут я тоже не пойму чем это плохо. Никто пока таргетить 2.0 не запрещает. Меня радуют улучшения в GUI (привет, рендеринг шрифтов), радуют улучшения EF4 (привет POCO/Proxy). Кому не надо - пущай таргетят обкатанные предыдущие версии. Ну а когда выйдет C# 5.0 никто ведь не будет принуждать использовать async. Свобода выбора она такая |
|||
|
||||
-Mikle- |
|
|||
Невидимка Vingrad'а Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Согласен с Kefir. На все нужно время и усилие. Что по поводу новичков, то многим и WinForms не понятен. А как было раньше? Писали бедняги под MFC и потели. Никто тогда не говорил "ой, что-то сложно, неудобно". Щас выходят новые абстракции и уровни упрощающие и улучшающие и опять не нравится. Если сравнить качество получаемого результата в WPF и MFC при одних и тех же усилиях, то разница громадная. Да и о каких усилиях я говорю... продолжая приводить в пример тот же самый MFC, даже отлично знающий его и имеющий опыт не с легкостью сделает навороченный интерфейс. А в WPF, достаточно только понять его устройство (научиться) и любой интерфейс не займет у вас много времени. И еще более равивая тему, скажу, теперь вам вообще не надо заботится об интерфейсе. Вам надо сделать только лишь его шаблон (необходимо важные его части), а сам интерфейс теперь может рисовать дизайнер воплощая все самые смелые свои желания и используя привычно выглядящий для дизайнера инструмент. Все, хватит программистам материть дизайнеров за их идеи, пусть теперь сами делают че хотят. Через какое-то время их станет все больше и больше (как когда начали появлятся вэб-дизайнеры). И лично я, рад что это все мы имеем уже сейчас. Это позволяет уже сейчас заниматься этими вопросами, учить своих дизайнеров, программистов чтобы года через два, они уже были. Правильно Кефир говорит, Майкрософт не заставляет вас использовать новые версии сразу, как только они выходят. Но пусть они выходят уже сейчас, чтобы мы их уже изучали и щупали. И чтобы добить наконец-таки, версии между собой не очень сильно разнятся. После входа в эту новую среду для меня не составляет особых усилий придерживаться нововедений в версиях (да и для многих тоже) так как в основном это вкусности (классные такие).
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
ДобренькийПапаша |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 2 Всего: 7 |
Блин, а у меня столько инфы в голове не укладывается - просто не знаю, что делать. Прочитал большую часть книги МакДоналда, при этом на большую часть вопросов теста (есть доступный дамп) ответить не могу - понимаю, что сертификата не достоин.
-------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
-Mikle- |
|
|||
Невидимка Vingrad'а Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Могу только дать совет - не торопиться. Хороший отдых и временная смена мозговой деятельности - часто способствуют усвоению. у меня, например, на работе всегда лежит журнал сканвордов, кроссвордов, судоку, анекдотов (намеренно не пользуюсь онлайновыми). И периодически, года втупляюсь во что-то, я берусь за него. Даже часок такой деятельности всегда помогает. Но это может только лично для меня работает, у других не знаю, попробуйте.
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
Kefir |
|
|||
«Hakuna Matata» Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 22 Всего: 87 |
Да ну, книга это, конечно, хорошо... Но толку от таких книг мало если всё только в теории смотреть и приложенные выдержки из кода читать. Ты возьми да и напиши какую программу. Чтобы со всякими примочками, стилями, зависимыми пропертями, с MVVM. А там глядишь через пол-годика (учитывая что программа пишется в свободное время) всё само-собой поуляжется и врежется в память намертво. Я могу честно признаться что до сих пор некоторые вещи в мсдн подглядываю, но это уже мелочи жизни. Главное в суть вникнуть, а кроме практики этого никак не добится.
|
|||
|
||||
Ilya81 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 105 Регистрация: 18.4.2014 Где: ЛО, Всеволожский р-н Репутация: 1 Всего: 4 |
Хоть писалось и давно, но про 3D его возможности по мне переоценены, по-моему это надо отметить, т. с. чтоб начинающие разработчики не слишком надеялись на этот 3D. По мелочи, конечно, он применим, но с Z-Fighting там просто беда, решения почти нет. Так что во всех случаях, когда пересечение каркасов (mesh) возможно, нужно использовать полноценный DirectX.
|
|||
|
||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |