Этот урок посвящен созданию дизайна и обработке событий в 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#.