Xamarin Forms C#: Обработка событий в C# (Урок 4)

Этот урок посвящен созданию дизайна и обработке событий в Xamarin Forms с использованием C#. Рассмотрим создание объектов, добавление их в контейнеры и обработку взаимодействия пользователя.

Создание дизайна с помощью C#

В предыдущем уроке дизайн создавался с помощью XAML. Хотя XAML будет использоваться и дальше, важно понимать, как создавать дизайн и с помощью C#. Для работы с C# откройте файл MainPage.xaml.cs. Этот файл содержит C# код для основной страницы приложения. В проекте также есть файл App.cs с глобальными настройками, но мы будем работать с MainPage.xaml.cs.

Этот файл содержит подключения модулей, пространство имен (общее для проекта) и класс, наследуемый от ContentPage. ContentPage — родительский объект для всех элементов страницы. Метод InitializeComponent() инициализирует компоненты и отображает дизайн. Нас интересует метод OnAppearing(), вызываемый после отображения страницы. В этом методе будем добавлять функциональность и создавать объекты для дизайна.

Создание объектов и добавление в контейнер

Как и в XAML, в C# начинаем с создания контейнера. В данном случае это StackLayout:

StackLayout stackLayout = new StackLayout();

Этот контейнер добавляется на страницу через свойство Content:

Content = stackLayout;

Теперь можно добавлять в stackLayout другие объекты, например, Label:

Label label = new Label { Text = "Hello, world!", TextTransform = TextTransform.Uppercase, FontSize = 25 };
stackLayout.Children.Add(label);

Свойства объектов (например, Text, TextTransform, FontSize) аналогичны атрибутам в XAML.

Аналогично создаются другие элементы, например, Button:

Button button = new Button { Text = "Нажми меня", FontSize = 25, TextColor = Color.Red };
stackLayout.Children.Add(button);

После добавления элементов в StackLayout, он отображается на странице.

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

Обработчики событий вызываются при взаимодействии пользователя с объектами (кнопки, текстовые поля и т.д.).

Добавление обработчика события к кнопке

Для добавления обработчика события к кнопке используется свойство Clicked:

button.Clicked += Button_Clicked;

Метод Button_Clicked вызывается при нажатии на кнопку. Он принимает два параметра: sender (объект, вызвавший событие) и e (информация о событии).

private void Button_Clicked(object sender, EventArgs e)
{
    // Код, выполняющийся при нажатии на кнопку
    button.Text = "Clicked!";
    button.TextColor = Color.Green;
}

Для доступа к объектам из разных методов рекомендуется создавать поля внутри класса:

private Button button;

// ... в методе OnAppearing() ...
button = new Button { Text = "Нажми меня", FontSize = 25, TextColor = Color.Red };
stackLayout.Children.Add(button);

// ... метод Button_Clicked() ...

Работа с элементами XAML в C#

Для получения данных из элементов, созданных в XAML, им необходимо присвоить программные имена (свойство x:Name):

<Entry x_Name="nameField" Placeholder="Enter name" />
<Entry x_Name="emailField" Placeholder="Email" />
<Entry x_Name="passwordField" Placeholder="Password" Password="True" />
<CheckBox x_Name="checkField" />
<Button x_Name="buttonSend" Text="Отправить" Clicked="ButtonSend_Clicked" />
<Label x_Name="errorText" TextColor="Red" FontSize="15" />

В обработчике событий в C# можно получить значения из этих элементов:

private async void ButtonSend_Clicked(object sender, EventArgs e)
{
    string name = nameField.Text;
    string email = emailField.Text;
    string password = passwordField.Text;
    bool isChecked = checkField.IsChecked;

    // ... проверка данных ...
    if (string.IsNullOrEmpty(name))
    {
        errorText.Text = "Имя не указано";
    } else if (string.IsNullOrEmpty(email)) {
        errorText.Text = "Email не указан";
    } // ... и так далее ...

    // ... отображение всплывающего окна ...
    await DisplayAlert("Данные из формы", "Все данные получены", "OK");
}

Метод DisplayAlert отображает всплывающее окно.

В этом уроке мы научились создавать дизайн и добавлять обработчики событий в Xamarin Forms приложениях с помощью C#. Рассмотрели создание объектов, добавление их в контейнеры, получение данных от пользователя и обработку событий. Использование программных имен для элементов в XAML упрощает работу с ними в C#.

Что будем искать? Например,программа