XAML в Windows Phone 8.1

Основы языка XAML

Последнее обновление: 31.10.2015

XAML (eXtensible Application Markup Language) представляет собой язык разметки на основе XML. При разработке для Windows Phone преимущественно мы будем использовать XAML для создания графического интерфейса. Однако было бы неправильно ассоциировать XAML исключительно с визуальным интерфейсом, как, например, HTML. XAML используется создания и инициализации объектов и создания их свойств декларативным способом. Например:

<Button x:Name="button1" Content="Считать" Width="150" VerticalAlignment="Top" />

В данном случае создается объект типа Button, который имеет имя button1, имеет ширину 150 пикселей и т.д. И хотя создание кнопки изменяет графическое представление, но далее мы посмотрим, что в XAML можно создавать и объекты, которые не влияют напрямую или вообще не влияют на графический интерфейс.

Структура и пространства имен XAML

При создании нового проекта для Windows Phone 8.1 по шаблону Blank App проект уже по умолчанию содержит файлы с кодом xaml. Например, автоматически генерируемый файл MainPage.xaml имеет следующую разметку:

<Page
    x:Class="HelloApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:HelloApp"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>
	
    </Grid>
</Page>

Подобно любому документу XML здесь определяется некоторая иерархия элементов. Элементом самого верхнего уровня является Page, который представляет собой отдельную страницу приложения. Фактически элемент Page представляет страницу с графическим интерфейсом, и в этом плане его можно сравнить со веб-страницей на html.

Пространства имен XAML

Элемент Page содержит ряд атрибутов, в частности, определения пространств имен, которые начинаются с атрибута xmlns:

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:HelloApp"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

Здесь определяются пять пространств имен, которые подключаются в файл по умолчанию.

Так, пространство имен http://schemas.microsoft.com/winfx/2006/xaml/presentation содержит описание и определение большинства элементов управления. Так как является пространством имен по умолчанию, то просто с помощью атрибута xmlns без всяких префиксов.

Пространство имен http://schemas.microsoft.com/winfx/2006/xaml содержит некоторые свойства XAML, например свойство Name или Key. Оно уже объявляется с помощью атрибута xmlns:x - префикс x после двоеточия означает, что те свойства элементов, которые содержатся в этом пространстве имен, будут использоваться с префиксом x - x:Name или x:Key. Например, во второй строке идет определение класса элемента Page: x:Class="HelloApp.MainPage". То есть с помощью элемента Page создается новый класс MainPage и соответствующий ему файл кода, куда будет прописываться логика для данного окна приложения.

Два последних пространства имен xmlns:d="http://schemas.microsoft.com/expression/blend/2008" и xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" используются только для визуализации дизайна страницы в окне дизайнера слева. При запуске приложения они никак не используются и игнорируются, поэтому на следующей строке можно увидеть атрибут mc:Ignorable="d". Он указывает, что надо игнорировать пространство имен с префиксом d.

Третье подключаемое пространство имен xmlns:local="using:HelloApp" представляет текущее пространств имен проекта, который в моем случае называется HelloApp. То есть, все определенные в проекте классы, можно будет использовать в XAML с префиксом local. Например, добавим в проект следующий класс:

namespace HelloApp
{
    class Smarthone
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

Скомпилируем проект и после этого мы сможем в xaml создавать объекты типа Smarthone:

<Page
    x:Class="HelloApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:HelloApp"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Page.Resources>
        <local:Smarthone Id="1" Name="Nokia Lumia 630" x:Key="phone" />
    </Page.Resources>
    <Grid>
    </Grid>
</Page>

Объект класса создается в качестве ресурса страницы (Page.Resources). При создании, как и другому ресурсу, этому объекту дается ключ с помощью свойства x:Key. (Более подробно о ресурсах мы поговорим в дальнейшем.) И также у него устанавливаются его свойства Id и Name. На визуальное отображение создание этого объекта никак не влияет.

Элементы и их атрибуты

XAML предлагает очень простую и ясную схему определения различных элементов и их свойств. Например, у нас определена кнопка:

<Page
    x:Class="HelloApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:HelloApp"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
		<Button x:Name="button1"  Width="100" Height="30" Content="Кнопка" />
    </Grid>
</Page>

Сначала идет элемент самого высшего уровня - Page, затем идет вложенный элемент Grid - контейнер для других элементов, и в нем уже определен элемент Button, представляющий кнопку.

У элемента Button можно определить свойства в виде атрибутов. Здесь определены свойства x:Name (имя кнопки), Width, Height и Content. Подобным образом мы можем определить и другие свойства, которые нам нужны. Либо можно вообще не определять свойства, и тогда они будут использовать значения по умолчанию.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850