
WPF Series: Intro aka Введение.
.NET*
Года 3 назад, обсуждая Windows Forms с другом, я жаловался на то что неудобно использовать Windows Forms для вывода видео и музыки, а друг о том, что ему неудобно создавать свои контролы, а также формировать тулбары. Мы и не думали тогда, что нам так упростят жизнь. Но у любой технологии есть свои плюсы и минусы. Мы платим за нее своим временем, своими проектами, когда года 1.5 назад я выпустил простейшее приложение для обновления одной игры (такого рода программы зачастую называют «Автопатчеры»), я и не думал о том, что не может быть столько людей, которые будут кричать не о том, что программа имеет плохой дизайн или баги, а то, что ведь нужно скачать 20 мегабайт .Net Framework 2.0. Жизнь научила меня изучать теперь сначала рынок, ведь даже самое красивое и правильное приложение может быть не оценено, если пользователю нужно совершать телодвижения, которые могут вызвать у него от сведения руки от нажатий кучи ненужных кнопок в диалогах программ до того, что ему нужно потратить дополнительный пенни для запуска вашей программы. Год назад я много слышал о различных технологиях, появившихся в Net Framework 3.0. Я уже начал писать ранее на C#/VB.Net в контексте ASP.Net и почитав отзывы наиболее рьяных архитекторов, решил подождать. Спустя полгода, а точнее прошлой весной, я слушал великолепные отзывы о технологии WPF от своего товарища, у него была одна проблема: 80% возможностей он так и не смог раскрыть, т.к. нормальная книга появилась летом (из тех, где подробно и довольно в доступной форме рассказывается о технологии), а до этого можно было почерпнуть информацию только из блогов, в коих, зачастую, многое упускалось из вида… Наслушавшись его, и умудрившись опыта, я сначала начал читать книгу, которая обновилась к этому времени, вместе с фреймворком до версии 3.5. Многое ускользало и пока продолжает ускользать от моего понимания, но теперь есть куда копать: западные блоггеры-программисты, раскусив плод WPF, застрочили как из пулемета, да и наши начинают догонять.
Что такое WPF?
В Windows с версии 3.11 присутствовал компонент вывода на экран GDI, позже его обновили, в Windows XP, если не ошибаюсь, уже используется GDI+. Проблем от использования GDI+ в приложениях было и будет много, наряду с GDI была подсистема вывода 3D – DirectX, существовавшая с Windows 95. У нее были другие проблемы, но главной проблемы – сильной загрузки процессора для перерисовки моделей у нее не было. Видимо решение у Microsoft зрело давно, раз они интегрировали WPF в Vista и Server 2008, которое, как мне кажется, и дало больший толчок для его использования, нежели всяческие семинары и статьи. Это, кстати дает дополнительный плюс, ведь упрощается модель редистрибуция приложений использующих 3 и 3.5 фреймворки. Собственно, как я думаю, Вы уже догадались, WPF использует DirectX для вывода приложений на экран пользователя. Но тут и первые грабли, т.к. отображение форм у пользователей будет местами разниться, ведь мы, же не сговорились и не скупили продукцию 3D middle и high видеокарт. В WPF, на данный момент существуют 3 уровня, для определения как будет «рендерится» формочка и остальные примитивы на экране. a) Уровень 0: Нет hardware acceleration (внутреннего ускорения). Примерно DirectX 7.0 b) Уровень 1: Частичная hardware acceleration. Примерно DirectX 8. c) Уровень 2: Все фичи задействованы. Примерно DirectX 9 и выше. Как узнать какой у вас уровень или у пользователя? Int renderingTier = (RenderCapability.Tier >> 16); if (renderingTier == 0) { // 0 уровень } Однако разработчики не ограничились тем, что использовали другой уровень презентационной модели, а сделали еще много вещей: a) Новая описательная модель формы и интерфейса в принципе — XAML b) Новая модель Компоновки: имеется ввиду не компоновщик на уровне компилятора, а новая модель включения одного в другое. Пример (в textbox вставить checkbox). c) Новые сопутствующие контролы и методы для печати и медиа. d) Новая модель привязки данных. e) Новые возможности в формах. f) Многое другое, что я еще не узнал. g) Возможность почти безболезненно перенести проект в Web (О XBAP Rich Web Application я расскажу, через пару статей). h) Анимация. Да называть все везде формами, наверное, неверно, ведь модель состоит из окон и страниц, страницы можно соответственно подгружать, что в веб-версии, что в обычной, через компонент Frame или через Canvas, например, в WPF/E (SilverLight). Пример подгрузки страницы: Frame.Source = new Uri ("Page1.xaml", UriKind.Relative); В следующей статье я рассмотрю XAML. Вкратце пока скажу, что XAML (eXtensible Application Markup Language) – это специальный описательный язык для документов, окон и страниц, чем то, напоминает этакую помесь XML и HTML. Ну и простой пример окна (только XAML):
-
<Window
-
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-
Title="TestingWPF" Width="310" Height="260"
-
WindowStartupLocation="CenterScreen">
-
-
<Grid>
-
<Grid.ColumnDefinitions>
-
<ColumnDefinition></ColumnDefinition>
-
</Grid.ColumnDefinitions>
-
-
<Grid.RowDefinitions>
-
<RowDefinition></RowDefinition>
-
</Grid.RowDefinitions>
-
-
<TextBlock Grid.Row="0" Grid.Column="0">Hello World</TextBlock>
-
</Grid>
-
</Window>
* This source code was highlighted with Source Code Highlighter.
Кстати,
советую для тестирования разметки и
небольших кусочков использовать не
Visual Studio, а XamlPadX
или XamlHack, или XamlPad.
В заключение,
хотелось бы порекомендовать книги по
WPF:
1) WPF. Windows Presentation Foundation в .NET 3.5 с
примерами на C# 2008 для профессионалов
Автор:
Мэтью Мак-Дональд.
Впечатления:
Написано очень добротно, неточностей
перевода мало, рассказано почти обо
всем, минус – то, что маленький тираж,
и когда она только появилась, пришлось
побегать и месяца полтора ждать.
2)
WPF. Windows Presentation Foundation в .NET 3.0 для
профессионалов.
Автор: тот
же.
Впечатления:
«В целом книга
написана очень хорошо, но, похоже,
все-таки, местами слишком все подробно
расписано и присутствуют неточности
перевода» – это со слов человека (который
упоминался в повествовании ранее),
который ее читал.
Upd.
Блоги
Вот
немного блогов, посвящённых
WPF:
blogs.msdn.com/adam_nathan/
www.drwpf.com/blog
— один из лучших WPF-блоггеров
www.beacosta.com/blog
— всё о Data Binding в
WPF
marlongrech.wordpress.com/
joshsmithonwpf.wordpress.com/
— один из лучших
WPF-блоггеров
work.j832.com/
learnwpf.com/
blog.pixelingene.com/
sachabarber.net/
— один из лучших
WPF-блоггеров
blogs.msdn.com/wpfsdk/
windowsclient.net/
www.codeplex.com/wpf/
— новые официальные
контролы
WPF
wpf.netfx3.com/blogs/presentation_bloggers/
Английские
книги
Pro
WPF: Windows Presentation Foundation in .NET 3.0 by Matthew
MacDonald
Essential Windows Presentation Foundation by Chris
Andersen
WPF Unleashed by Adam Nathan
Дополнительные
программы, для работы с WPF
Kaxaml
(Спасибо хаброюзеру Vladek за помощь в дополнении поста и хаброюзеру XaocCPS за его рецензирование)
Буду рад, если Вы дополните этот список, особенно книгами на английском, т.к я пока еще их не изучал, но видел, либо сделаете уточнения к статье. Спасибо!