Что такое XAML

Технология WPF широко использует язык XAML (Extensible Application Markup Language), который является подмножеством языка XML. Когда вы будете смотреть исходники XAML-файлов, то увидите что-то вроде такого:

<Button Foreground="LightSeaGreen" FontSize="24pt" Width="200"	Height="50">
	Привет, XAML
</Button>

Вы видите, что здесь присутствует начальный тег, конечный тег и содержимое, которое находится между ними. То есть перед нами код в формате XML. В начальном теге мы видим, что определен некий объект Button с несколькими атрибутами со значениями, взятыми в кавычки. Атрибуты задают цвет фона, размер шрифта и размер самой кнопки.

Язык XAML проектировался в основном для создания и инициализации объектов. Аналогом приведенного примера можно считать следующий код на C#

Button button = new Button();
button.Foreground = Brushes.LightSeaGreen;
button.FontSize = 32;
button.Width = 200;
button.Height = 50;
button.Content = "Привет, XAML";

Обратите внимание, что в XAML-файле мы сразу используем атрибут LightSeaGreen без связки с классом Brushes, а размеры шрифта указываем в пунктах. В дальнейшем вы увидите, что XAML-код достаточно громоздок по сравнению с обычным процедурным кодом, но гораздно нагляднее.

Макет окна программы представляет собой иерархию интерфейсных элементов: панели, элементы управления и т.п. Данная иерархия отражается в виде вложенных элементов.

<StackPanel>
<Button Foreground="LightSeaGreen" FontSize="24pt" Width="200" Height="50">
Привет, XAML
</Button>

<Ellipse Fill="Brown" Width="200" Height="100" />
<Button Width="500" Height="200">
<Image Source="http://developer.alexanderklimov.ru/images/cat_bottom.png"
Stretch="None" />
</Button>

<ListBox Width="100" Height="60" Margin="24">
  <ListBoxItem>Рыжик</ListBoxItem>
  <ListBoxItem>Васька</ListBoxItem>
  <ListBoxItem>Барсик</ListBoxItem>
</ListBox>
</StackPanel>

Мы видим, что объект StackPanel содержит четыре дочерних элемента: Button, Ellipse, снова Button и ListBox с дочерними элементами ListBoxItem. Первый объект Button содержит текст, а второй Button содержит дочерний элемент Image. Обратите также внимание, что объекты Ellipse и Image не имеют содержимого, поэтому мы можем использовать для них укороченный синтаксис XML, при котором закрывающий тег заменяется косой чертой перед закрывающей угловой скобкой начального тега. Также обратите внимание, что для задания атрибуту Stretch элемента Image значения из перечисляемого типа Stretch достаточно указать имя члена перечисления.

Часто файл XAML может заменить целый конструктор класса, производного от Windows, в котором обычно происходит макетирование и устанавливаются обработчики событий. Сами обработчики пишутся на процедурном языке (C#), но если обработчик можно заменить привязкой данных, то привязка находит прямое отражение в XAML.

XAML отделяет визуальное оформление приложения от его функциональности. Фрагменты, которые приводились выше, возможны лишь в контексте большого документа XAML. Необходимо в файлах XAML указывать пространства имен. Пространства имен XML по умолчанию объявляется в документах при помощи атрибута xmlns. Пространство имен относится к элементу, в котором находится его объявление, а также к его дочерним элементам. Имена пространств должны быть уникальными, очень часто для этого используется URL. Например, для кода XAML, используемого в программах WPF, используется:

http://schemas.microsoft.com/winfx/2006/xaml/presentation

Открывать эту страницу в браузере не стоит - там ничего нет. Это просто имя пространства имен, созданное Microsoft для идентификации элементов XAML типа Button, StackPanel, Image.

Таким образом, чтобы превратить фрагмент кода, который мы использовали раньше, в XAML, нужно просто добавить в него атрибут xmlns и соответствующее пространство имен:

< -- Пример XAML -->
<Button xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Foreground="LightSeaGreen" 
    FontSize="24pt" Width="200"	Height="50">
	  Привет, XAML
</Button>

Вы можете сохранить данный фрагмент в файле с расширением xaml. Если у вас Windows 7, то можете запустить данный файл двойным щелчком мыши. На экране появится окно Internet Explorer с кнопкой.

Такие xaml-файлы называются автономными. Расширение xaml ассоциируется в программой PresentationHost.exe, который преобразует код и отображает объекты в Internet Explorer.

Кроме запуска xaml-файла с жесткого диска, можно разместить его на сайте и запустить оттуда. Возможно, для этого придется зарегистрировать тип MIME для расширения xaml. Например, включить строчку в файл .htaccess:

AddType application/xaml+xml xaml

XML-файл может иметь только один корневой элемент, например, StackPanel. Между начальным и конечным тегами размещается содержимое StackPanel - дочерние элементы. Элемент Ellipse содержит пять атрибутов, соответствующих свойствам класса Ellipse, но не имеет содержимого, поэтому в его оформлении используется синтаксис пустого элемента. Элемент ListBox имеет три дочерних элемента ListBoxItem. Содержимое каждого элемента ListBoxItem представляет собой текстовую строку.

При запуске автономных файлов в строке Internet Explorer отображается полное имя файла. Если вы хотите задать свой текст, то необходимо выбрать в качестве корневого элемента объект Page и задать ему свойства WindowTitle. Соответственно, StackPanel станет его дочерним элементов.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" WindowTitle="Коты изучают XAML">
<StackPanel>
...
Реклама

триммер для бороды ; кафе бибирево