Avalonia XAML
Avalonia UI использует XAML для описания пользовательского интерфейса. XAML — это яз ык разметки, основанный на XML, который применяется во многих фреймворках пользовательского интерфейса.
Расширение файлов AXAML
В то время как стандартное расширение файлов XAML — .xaml
, в Avalonia UI используется собственное расширение .axaml
(Avalonia XAML) из-за технических особенностей интеграции с Visual Studio.
Формат файла
Пример файла Avalonia XAML:
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="AvaloniaApplication1.MainWindow">
</Window>
Как и в любом XML-документе, в файле есть корневой элемент. В данном примере это <Window></Window>
, который определяет тип корневого элеме нта. Этот элемент соответствует определённому контролу Avalonia UI, в данном случае окну.
Пример выше использует три важных атрибута:
xmlns="https://github.com/avaloniaui"
— объявляет пространство имён XAML для Avalonia UI. Без него файл не будет распознан как документ Avalonia XAML.xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
— объявляет пространство имён для языка XAML.x:Class="AvaloniaApplication1.MainWindow"
— указывает XAML-компилятору, где находится связанный класс для данного файла. Этот класс обычно описывается в C#-файле (code-behind).
Подробнее о концепции "code-behind" можно прочитать здесь.
Элементы управления
Вы можете создать пользовательский интерфейс (UI), добавляя XML-элементы, представляющие элементы управления Avalonia UI. Имя элемента совпадает с именем класса контрола.
Интерфейс может состоять из множества разных элементов управления. Подробнее о создании сложного интерфейса можно прочитать здесь.
Например, следующий код добавляет кнопку в окно:
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Button>Hello World!</Button>
</Window>
Список встроенных контролов Avalonia UI можно найти здесь.
Атрибуты элементов управления
Атрибуты XML-элементов соответствуют свойствам контролов. Свойства можно задать, добавляя атрибуты к элементам.
Например, чтобы задать синий фон для кнопки, добавьте атрибут Background
:
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Button Background="Blue">Hello World!</Button>
</Window>
Содержимое элементов управления
Содержимое кнопки в примере выше задаётся строкой "Hello World!", расположенной между открывающим и закрывающим тегами. Альтернативный способ — использование атрибута Content
:
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Button Content="Hello World!"/>
</Window>
Это поведение характерно для содержимого элементов управления в Avalonia UI.
Привязка данных
Система привязки данных Avalonia UI позволяет связывать свойства элементов управления с объектами. Это делается с помощью расширения разметки {Binding}
. Например:
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Button Content="{Binding Greeting}"/>
</Window>
Подробнее о концепции привязки данных можно прочитать здесь.
Файлы "code-behind"
Многие файлы XAML имеют связанный файл "code-behind", обычно написанный на C#, с расширением .xaml.cs
.
Руководство по программированию с использованием "code-behind" доступно здесь.
Пространства имён XML
В Avalonia XAML можно объявлять простр анства имён, как и в любом XML-документе. Это позволяет процессору XML находить определения элементов.
Подробнее о пространствах имён XML читайте в документации Microsoft.
Пространства имён добавляются с помощью атрибута xmlns
. Формат объявления:
xmlns:alias="definition"
Чаще всего пространства имён объявляют в корневом элементе.
Префикс CLR Namespace
Для ссылок на код в текущей или подключённой сборке используется префикс clr-namespace:
:
xmlns:myAlias1="clr-namespace:MyNamespace.AppNameSpace.UI"
xmlns:myAlias2="clr-namespace:MyNamespace.OtherAssembly;assembly=OtherAssembly"
Префикс Using
Альтернативный префикс using:
позволяет ссылаться на код в текущей сборке:
xmlns:myAlias3="using:MyNamespace.AppNameSpace.UI"