Code-behind
Помимо XAML-файла, большинство элементов управления Avalonia также имеют файл code-behind, который обычно пишется на C#. По соглашению файл code-behind имеет расширение .axaml.cs и часто отображается вложенным под XAML-файлом в вашей IDE.
Например, в обозревателе решений Visual Studio можно увидеть файл MainWindow.axaml вместе с его файлом code-behind MainWindow.axaml.cs:
Файл code-behind содержит класс с тем же именем, что и у XAML-файла. Например:
using Avalonia.Controls;
namespace AvaloniaApplication1.Views
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
Обратите внимание, что имя класса совпадает с именем XAML-файла и также указано в атрибуте x:Class элемента окна.
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="AvaloniaApplication1.Views.MainWindow">
...
</Window>
Если вы изменяете имя класса в коде или его пространство имен, убедитесь, что атрибут x:Class всегда совпадает, иначе произойдет ошибка.
Когда файл code-behind создается впервые, он содержит только конструктор, который вызывает метод InitializeComponent(). Этот вызов обязателен для загрузки XAML во время выполнения.
Поиск элементов управления
При работе с code-behind часто возникает необходимость получить доступ к элементам управления, определенным в XAML.
Для этого сначала нужно получить ссылку на нужный элемент управления. Назначьте элементу управления имя с помощью атрибута Name (или x:Name) в XAML.
Пример XAML-файла с именованной кнопкой:
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="AvaloniaApplication5.MainWindow">
<Button Name="greetingButton">Hello World</Button>
</Window>
Теперь вы можете получить доступ к кнопке через автоматически созданное поле greetingButton из code-behind:
using Avalonia.Controls;
namespace AvaloniaApplication1.Views
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
greetingButton.Content = "Goodbye Cruel World!";
}
}
}