При разработке приложений 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.
При написании программы на 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.
Также мы можем определить и другие атрибуты, которые нам нужны. Либо мы в общем можем не определять атрибуты, и тогда они будут использовать значения по умолчанию.
И мы можем запустить проект, и тогда на форме приложения появится добавленная нами кнопка: