Перейти к основному содержимому
Версия: 11.0.0

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-файла. Например:

MainWindow.axaml.cs
using Avalonia.Controls;

namespace AvaloniaApplication1.Views
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}

Обратите внимание, что имя класса совпадает с именем XAML-файла и также указано в атрибуте x:Class элемента окна.

MainWindow.axaml
<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-файла с именованной кнопкой:

MainWindow.axaml
<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:

MainWindow.axaml.cs
using Avalonia.Controls;

namespace AvaloniaApplication1.Views
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
greetingButton.Content = "Goodbye Cruel World!";
}
}
}

Установка свойств

Имея ссылку на элемент управления в code-behind, вы можете установить его свойства. Например, можно изменить фон кнопки следующим образом:

greetingButton.Background = Brushes.Blue;

Обработка событий

Полезное приложение требует выполнения каких-либо действий! При использовании подхода code-behind вы пишете обработчики событий в файле code-behind.

Обработчики событий пишутся как методы в файле code-behind и затем указываются в XAML с помощью атрибута события. Например, чтобы добавить обработчик для события клика кнопки:

MainWindow.axaml
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="AvaloniaApplication4.MainWindow">
<Button Click="GreetingButtonClickHandler">Hello World</Button>
</Window>
MainWindow.axaml.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

public void GreetingButtonClickHandler(object sender, RoutedEventArgs e)
{
// код здесь
}
}

Обратите внимание, что многие обработчики событий Avalonia передают специальный аргумент класса RoutedEventArgs. Этот аргумент содержит информацию о том, как событие было создано и распространено.

к сведению

Для получения дополнительной информации о концепциях маршрутизации событий см. здесь.