Основы XAML

XAML в Universal Windows Platform

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

При разработке приложений UWP с помощью языка C# основной технологией для построения графического интерфейса является XAML (eXtensible Application Markup Language). XAML представляет язык разметки на основе XML, который используется для декларативного описания графического интерфейса.

XAML позволяет отделить определение интерфейса или внешнего вида приложения от его логики, которая пишется на C#. Кроме того, декларативное описание интерфейса делает код более компактным и понятным.

Если мы возьмем стандартный проект UWP по типу Blank Application, то как раз увидим файлы, которые используют XAML. Например, в проекте мы можем найти файл MainPage.xaml, который представляет декларативное описание графического интерфейса для единственной страницы в приложении:

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

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    </Grid>
</Page>

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

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

При написании программы на C# мы можем подключать классы из внешних пространств имен с помощью директивы using, например, using System.Windows. В XAML также есть свои пространства имен, только они добавляются в документ с помощью атрибута xmlns. В частности, если мы посмотрим на содержание элемента Page, то мы как раз можем заметить подключенные пространства имен:

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:XamlApp"
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.

    Так, на второй строке идет следующее выражение: x:Class="XamlApp.MainPage". Атрибут Class указывает на класс C#, который будет соответствовать данному элементу Page. И так как этот атрибут используется с префиксом x, то соответственно определение атрибута Class будет извлекаться из пространства имен xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

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

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

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

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

<Page> </Page>

Либо элемент может иметь сокращенню форму с закрывающим слешем в конце, наподобие:

<Page />

Но в отличие от элементов обычного документа xml элементы в xaml соответствуют определенному классу из C#. Например, кнопка - элемент Button соответствует классу Windows.UI.Xaml.Controls.Button. А атрибуты элемента Button соответствуют свойствам класса Button.

Например, добавим на страницу кнопку:

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

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Button x:Name="button1" Width="100" Height="40" Content="Кнопка" FontFamily="Verdana" />
    </Grid>
</Page>

Для кнопки мы можем определить свойства в виде атрибутов. Здесь определены атрибуты x:Name (имя кнопки), Width, Height, FontFamily (используемый шрифт) и Content. Причем, атрибут x:Name берется в данном случае из пространства имен http://schemas.microsoft.com/winfx/2006/xaml, которое сопоставляется с префиксом x. А остальные атрибуты не используют префиксы, поэтому берутся из основного пространства имен http://schemas.microsoft.com/winfx/2006/xaml/presentation. Из него же берется и сам элемент Button.

Также мы можем определить и другие атрибуты, которые нам нужны. Либо мы в общем можем не определять атрибуты, и тогда они будут использовать значения по умолчанию.

И мы можем запустить проект, и тогда на форме приложения появится добавленная нами кнопка:

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