Введение в XAML

XAML — это декларативный язык программирования общего назначения, предназначенный, в настоящее время, в основном для конструирования и инициализации объектов визуального интерфейса приложения.  Одна из целей использования XAML при разработке приложений — отделить логику приложения от его интерфейса.  

Основные правила XAML

Каждый элемент в документе XAML отображается на экземпляр класса .NET

При этом, имя элемента в разметке XAML в точности соответствует имени класса. Например, элемент <Button> из предыдущей статьи сообщает WPF, что должен быть создан объект Button.

<Button Content="Нажми меня" Width="200" Height="60" Click="Button_Click"/>

Код C# с помощью которого мы могли бы получить точно такой же результат, выглядит следующим образом:

Button button = new Button();
button.Content = "Нажми меня";
button.Width = 200;
button.Height = 60;
button.Click += new RoutedEventHandler(Button_Click);

Различие в том, что при написания кода XAML результат будет виден сразу же в визуальном редакторе. При создании же кнопки в коде C# нам необходимо будет вначале скомпилировать и запустить приложение, чтобы увидеть результат.

Свойства каждого класса можно устанавливать через атрибуты

Собственно, это правило наглядно продемонстрировано в примере выше для кнопки. В XAML атрибуты Content, Width и Height являются, по сути, свойствами класса Button.

Как и любой XML-документ, код XAML допускает вложение одного элемента внутрь другого

Вложение обычно является способом выразить включение (containment). Другими словами, если вы видите элемент Button внутри элемента Grid, то пользовательский интерфейс  включает Grid, содержащий внутри себя Button. Например,

<Grid Name="grid">
    <Button Content="Нажми меня" Width="200" Height="60" Click="Button_Click"/>
</Grid>

Здесь стоит обратить внимание на элемент Grid, а точнее, на его атрибут Name. Следуя предыдущему правилу, мы установили для класса Grid значение свойства Name как «grid». Теперь мы можем продемонстрировать то, как будет выглядеть аналогичный код, написанный на C#.

Button button = new Button();
 button.Content = "Нажми меня";
 button.Width = 200;
 button.Height = 60;
 button.Click += new RoutedEventHandler( Button_Click);
 _ = grid.Children.Add(button);

В последней строке мы добавляем к списку дочерних элементов grid созданную кнопку.

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

Когда мы пишем код на C#, то для того, чтобы получить доступ к каким-либо классам, мы подключаем соответствующие пространства имен с помощью директивы using, например

using System.Windows.Controls;

В XAML, чтобы задействовать какое-либо элементы, мы также подключаем пространства имен, но уже используя правила работы как с XML. Например, посмотрим на содержимое файла MainWindow.xaml

<Window x:Class="HelloWpf.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:HelloWpf"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        
    </Grid>
</Window>

Вторая и третья строчки представляют собой пространства имен, подключаемые в проект по умолчанию. А атрибут xmlns представляет специальный атрибут для определения пространства имен в XML.

Пространство имен http://schemas.microsoft.com/winfx/2006/xaml/presentation

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

System.Windows
System.Windows.Automation
System.Windows.Controls
System.Windows.Controls.Primitives
System.Windows.Data
System.Windows.Documents
System.Windows.Forms.Integration
System.Windows.Ink
System.Windows.Input
System.Windows.Media
System.Windows.Media.Animation
System.Windows.Media.Effects
System.Windows.Media.Imaging
System.Windows.Media.Media3D
System.Windows.Media.TextFormatting
System.Windows.Navigation
System.Windows.Shapes
System.Windows.Shell

Пространство имен http://schemas.microsoft.com/winfx/2006/xaml

Определяет некоторые свойства XAML, например свойство Name или Key. Используемый префикс x в определении xmlns:x означает, что те свойства элементов, которые заключены в этом пространстве имен, будут использоваться с префиксом x — x:Name или x:Key. Это же пространство имен используется в первой строчке в файле MainWindow.xaml

x:Class="HelloWpf.MainWindow

Пространство имен http://schemas.microsoft.com/expression/blend/2008

Предоставляет поддержку атрибутов в режиме дизайнера. Это пространство имен, в основном, предназначено для другого инструмента по созданию дизайна на XAML — Microsoft Expression Blend.

Пространство имен http://schemas.openxmlformats.org/markup-compatibility/2006

обеспечивает режим совместимости разметок XAML. В определении объекта Window можно найти применение этого пространства имен, а именно:

mc:Ignorable="d"

Это выражение позволяет игнорировать парсерам XAML во время выполнения приложения дизайнерские атрибуты из пространства имен с префиксом d, то есть из пространства имен http://schemas.microsoft.com/expression/blend/2008.

xmlns:local=»clr-namespace:HelloWpf» — пространство имен текущего проекта

Так как в предыдущей части мы создавали проект с названием HelloWpf, то Visual Studio по умолчанию создало для такого проекта пространство имен HelloWpf. Через префикс local мы можем получить в XAML различные объекты, которые были определены в проекте.

Итого

С помощью языка разметки XAML можно достаточно выразительно описать интерфейс приложения. При этом, для создания каких-либо классов и объектов, например, кнопки, метки и так далее в XAML используются элементы, наподобие элементов XML и каждому элементу XAML соответствует аналогичный класс C#. Для определения свойств в XAML используются атрибуты и, при этом, каждый атрибут соответствует аналогичному свойству класса. Что касается пространств имен, то здесь в XAML используется правило «многие к одному», то есть одному пространству имен XAML могут соответствовать несколько пространств имен .NET.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии