Изучение XAML
Наступило самое время взглянуть на сгенерированный шаблоном view код.
Начнем с корня элемента, в нем объявлены пространства имен и настройки:
<UserControl
xmlns="https://github.com/avaloniaui"
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"
mc:Ignorable="d" d:DesignWidth="250" d:DesignHeight="450"
x:Class="ToDoList.Views.ToDoListView">
Корневой элемент в XAML-файле начинается с <UserControl и за ним объявляются несколько пространств имен XML xmlns,
общих для Avalonia UI controls.
Самое важное объявление, на которое стоит обратить внимание, указано первым:
<UserControl xmlns="https://github.com/avaloniaui" ... >
Оно указывает, что данный XAML-файл использует Avalonia UI XAML.
Без данной строки, ваш проект Avalonia UI не будет работать!
Следующее пространство имен - это xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml".
Оно используется для импорта Microsoft XAML, используемых Avalonia UI.
Подробнее в документации Microsoft, см. здесь.
Оставшиеся два пространства имен, используются для взаимодействия в Avalonia UI между кодом и панелью предварительного просмотра.
<UserControl ...
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" ... >
К примеру, рассмотрим изменение высоты и ширины control в предварительном просмотре, как вы уже делали ранее:
<UserControl ...
mc:Ignorable="d" d:DesignWidth="250" d:DesignHeight="450" ... >
Запись mc:Ignorable="d", указывает движку Avalonia UI XAML, что записи, начинающиеся с d:, надо пропускать при запуске.
Последняя строка, связывает XAML-файл с его code-behind классом.
Обратите внимание, что здесь используется полное имя класса.
<UserControl ...
x:Class="ToDoList.Views.ToDoListView">
Содержимое Control
В зоне содержимого user control указана dock panel:
<DockPanel>
Подробнее о зонах макета, см. здесь.
user control может содержать только один-единственных дочерний control в своей зоне содержимого;
По этой причине, вам почти всегда придется использовать panel controls из Avalonia UI,
которые которые позволяют указывать внутри себя несколько control.
Подробнее о panel controls, используемых в Avalonia UI, см. здесь.
В этом примере, вы используете panel control, называемую <DockPanel>.
Данный тип панели, размещает дочерние элементы по краям своей зоны содержимого.
Каждому дочернему элементу можно задать привязку: top, bottom, left или right.
Она указывается в атрибуте DockPanel.Dock.
В указанном ниже примере, кнопка притягивается к нижней части и растягивается по ширине, а ее текст центрируется.
<Button DockPanel.Dock="Bottom"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Center">Add Item</Button>
В dock panel должен быть хотя бы один control в зоне содержимого, который заполнит оставшееся место в зоне содержимого.
Иначе он будет отображаться некорректно. Данный control не должен содержать атрибут DockPanel.Dock.
Для заполнения свободного места, в руководстве используется stack panel:
<StackPanel>
Stack Panel размещает дочерние элементы друг за другом (по-умолчанию, вертикально).
Вы можете указать горизонтальное расположение элементов в атрибуте Orientation.
Вы будете часто использовать stack panel в Avalonia UI.
Подробную информацию о Stack Panel, см. здесь.
Оставшийся XAML добавит захардкоженные элементы списка дел в виде флажков:
<CheckBox Margin="4">Walk the dog</CheckBox>
<CheckBox Margin="4">Buy some milk</CheckBox>
Обратите внимание, что для указанных выше элементов, указан атрибу т margin.
Он добавит пространства между элементами, что визуально разделит их.
margin является одной из зон макета в control _Avalonia UI`. Подробнее о концепте зон макета, см. здесь.
На следующей страницу узнаете, как отображать созданную view в основном окне приложения.