Библиотека классов WPF состоит примерно из 1600 открытых (public) типов и более чем 3500 классов. Поэтому она имеет значительно более обширный интерфейс прикладного программирования (API), чем ASP.NET или Windows Forms. Как и следует ожидать от библиотеки классов .NET, происхождение всех этих классов восходит к System.Object. Кроме того, большинство классов WPF основаны на так называемых "базовых элементах": это классы UIElement, FrameworkElement, ContentElement и FrameworkContentElement. Эти классы отвечают за основное представление и компоновку элементов и содержатся в пространстве имен System. Windows.
В дополнение к этим четырем классам базовых элементов имеется еще несколько важных базовых классов, которые обеспечивают существенную часть функциональности WPF:
□ visual— этот класс является основным модулем визуализации в WPF; UIElement наследует от visual — так же, как и классы более высокого уровня (такие как Button);r
□ DispatcherObject — этот класс реализует модель многопоточности в WPF;
□ Control — это базовый класс для элементов управления в WPF;
□ Application— класс Application инкапсулирует все приложения WPF; он обеспечивает сервисы жизненного цикла приложения, в том числе Run (для запуска приложения) и Exit (для завершения приложения).
Как и следовало ожидать, библиотека классов WPF обеспечивает также все основные элементы управления, которые обычно имеются в приложениях Windows — такие как кнопки, метки, списки и текстовые поля.
Следующий фрагмент кода показывает создание экземпляра кнопки WPF и присваивание ей текста "Push Me". Обратите внимание, что конструкции элементов управления выглядят знакомыми, но сама объектная модель несколько отличается; объект Button в WPF не имеет свойства Text, как мы привыкли того ожидать от кнопки в ASP.NET или WinForms. Вместо этого он предоставляет свойство Content.
System.Windows.Controls.Button btn = new Button(); btn.Content = "Push Me";
Помимо использования процедурного кода (подобного показанному здесь), WPF также позволяет нам создавать объекты и манипулировать ими декларативным образом — при помощи разметки, а именно — при помощи XAML.
Язык разметки Extensible Application Markup Language (XAML)
Язык XAML является диалектом XML, который можно использовать для описания структуры презентационного уровня приложения WPF (например, для создания экземпляров элементов управления, внешнего вида и компоновки).
XAML— это новый язык, и он является главным средством, при помощи которого различные инструменты WPF декларативным образом создают объекты и настраивают свойства. Поэтому возникает соблазн сравнить XAML и HTML: оба они являются декларативными способами описания объектов. Но XAML фактически тесно связан с .NET Framework. В действительности XAML является обобщенным способом создания и манипулирования объектами .NET. Инструменты WPF (такие как визуальный конструктор WPF Designer в Visual Studio) используют XAML, но строго говоря, XAML не является частью WPF. Вы можете написать целое XAML-приложение исключительно на вашем любимом управляемом языке. Но поскольку XAML (как модель программирования) приносит с собой некоторые важные нововведения, то он очень интенсивно используется всеми инструментами фирмы Microsoft (и других фирм) не только в области WPF, но и за ее пределами. Например, он используется также в Windows Workflow Foundation для описания рабочих процессов.
Точно так же как и раньше, давайте создадим объект Button и присвоим кнопке некий текст — но на этот раз всю работу сделаем при помощи XAML:
<Button Content="Push Me"x/Button>
\\яи мы могли бы написать этот код так:
<Button>Push Me</Button>
Примечание
Функциональность XAML является подмножеством того, что можно сделать в .NET при помощи кода. Иначе говоря, все, что вы можете сделать в XAML, вы можете сделать также и в коде, но не наоборот.
В типичном WPF-приложений XAML сосуществует с управляемым кодом при помощи все той же парадигмы частичных классов, введенной в ASP.NET. Иначе говоря, у нас может иметься файл MainForm.xaml с внешним видом окна и файл MainForm.xaml.vb, который содержит код, реагирующий на ввод пользователя в этой форме. Мы увидим все это в действии чуть позже в этой же главе, когда будем подробно рассматривать визуальный конструктор WPF.
Если при создании WPF-приложения можно обойтись без XAML, то почему он так востребован? Поскольку вы можете создавать объекты пользовательского интерфейса как на XAML, так и на управляемом коде, то зачем вообще XAML нужен? Однако есть несколько областей, где декларативный синтаксис чрезвычайно важен.