Содержание
Страница в .NET MAUI — это элемент пользовательского интерфейса верхнего уровня на котором размещаются элементы управления (кнопки, метки, таблицы и т.д.). В приложении может использоваться несколько страниц различных типов.
Класс Page
Класс Page в основном выступает в качестве базового класса для более полезных производных типов. Так, например, мы, при изучении различных элементов управления в .NET MAUI использовали один из производных от Page классов страниц — ContentPage:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MauiApp7.MainPage">
</ContentPage>
Вместе с этим, класс Page содержит достаточно много полезных свойств, методов и событий, которые стоит изучить.
Основные свойства класса Page
Рассмотрим основные свойства класса Page, которые мы будем в дальнейшем использовать в работе (часть из этих свойств унаследованы от класса VisualElement):
| Свойство | Тип | Описание |
Background |
Brush |
Устанавливает значение Brush , которое будет использоваться для заполнения фона элемента |
Behaviors |
Behavior |
Список объектов типа Behavior связанных с элементом |
Is |
bool |
Индикатор занятости страницы. Возвращает true, если страница «занята», например, при выполнении какой-либо длительной операции. Значение этого свойства зависит от платформы |
Navigation |
INavigation |
Возвращает объект, используемый для навигации на основе стека. |
Padding |
Thickness |
Определяем внутренние отступы элемента. Подробную информацию о позиционировании элементов управления см. в этой части |
Title |
string |
Заголовок страницы |
Toolbar |
IList<ToolbarItem> |
Список элементов управления в панели инструментов на странице (верхняя панель) |
Triggers |
IList<TriggerBase> |
Список триггеров для элемента |
Часть из этих свойств мы будем подробно изучать в других частях руководства, например, свойства Behaviors и Triggers, а с некоторыми из представленных выше свойств мы можем познакомиться сейчас. Например, создадим новое приложение .NET MAUI и изменим код страницы MainPage.xaml следующим образом:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MauiApp7.MainPage"
Title="Главная страница"
Background="Coral"
Padding="20">
<ContentPage.ToolbarItems>
<ToolbarItem Text="Кнопка 1"/>
<ToolbarItem Text="Кнопка 2"/>
<ToolbarItem Text="Кнопка 3"/>
</ContentPage.ToolbarItems>
<Button Text="Пример элемента управления"/>
</ContentPage>
Здесь мы установили цвет фона страницы, определили её заголовок, внутренние отступы, а также воспользовались свойством ToolbarItems и разместили на панели управления три кнопки (пока без каких-либо обработчиков). Теперь, если запустить приложение, то мы увидим следующую страницу приложения:
События класса Page
Также класс Page предоставляет нам достаточно много различных событий, используя которые мы можем выполнять какую-либо полезную работу, например, при загрузке страницы, переходе со страницы на страницу и так далее. Опять же, с частью этих событий мы познакомимся далее, но стоит отметить такое часто используемое событие:
public event EventHandler Appearing;
Это событие генерируется, когда страница становится видимой на экране устройства и может использоваться, например, для подготовки каких-либо данных. В качестве примера, допишем XAML-код страницы MainPage.xaml нашего приложения следующим образом:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MauiApp7.MainPage"
Title="Главная страница"
Background="Coral"
Padding="20"
Appearing="ContentPage_Appearing">
<ContentPage.ToolbarItems>
<ToolbarItem Text="Кнопка 1" x:Name="ToolButton"/>
<ToolbarItem Text="Кнопка 2"/>
<ToolbarItem Text="Кнопка 3"/>
</ContentPage.ToolbarItems>
<Button Text="Пример элемента управления"/>
</ContentPage>
Здесь мы определили обработчик события Appearing страницы, а также тег x:Name для первой кнопки в панели управления. Теперь изменим файл отдельного кода MainPage.xaml.cs следующим образом:
namespace MauiApp7
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private void ContentPage_Appearing(object sender, EventArgs e)
{
ToolButton.Clicked += Click;
}
public void Click(object sender, EventArgs e)
{
Background = Color.FromRgb(255, 0, 0);
}
}
}
Здесь мы создали обработчик события Click для кнопки, в котором меняем цвет фона страницы:
public void Click(object sender, EventArgs e)
{
Background = Color.FromRgb(255, 0, 0);
}
и в обработчике ContentPage_Appearing назначаем кнопке с x:Name="ToolButton" созданный обработчик:
private void ContentPage_Appearing(object sender, EventArgs e)
{
ToolButton.Clicked += Click;
}
Теперь можно запустить приложение и убедиться, что при клике по первой кнопке в панели инструментов цвет фона страницы меняется на красный:
Таким образом, обработчик события для кнопки назначается именно в момент отображения страницы на экране. Аналогичным образом, используя событие Appearing, мы могли бы выполнять и другую работу приложения.
Противоположным событием является событие
public event EventHandler Disappearing;
которое генерируется в тот момент, когда страница визуально исчезает с экрана.
Методы класса Page. Диалоговые окна
Среди множества методов класса Page стоит выделить методы, позволяющие отображать на экране устройства различные диалоговые окна. Рассмотрим эти методы более подробно.
DisplayActionSheet
public Task<string> DisplayActionSheet(string title, string cancel, string destruction, params string[] buttons);
Метод позволяет вывести на экран диалоговое окно в котором пользователь может сделать выбор из нескольких действий. Параметры метода:
title— заголовок окнаcancel— текст для кнопки отмены (для скрытия кнопки необходимо указатьnull)destruction— текст для кнопки удаления (для скрытия кнопки необходимо указатьnull).buttons— текстовые метки для дополнительных кнопок
В качестве результата метод возвращает текст нажатой пользователем кнопки. В качестве примера, продолжим работу над нашим приложением и изменим обработчик Click кнопки следующим образом:
public async void Click(object sender, EventArgs e)
{
var result = await DisplayActionSheet("Выберите цвет фона", "Отмена", null, ["Красный", "Зеленый", "Синий"]);
switch (result)
{
case "Красный":
{
Background = Color.FromRgb(255, 0, 0);
break;
}
case "Зеленый":
{
Background = Color.FromRgb(0, 255, 0);
break;
}
case "Синий":
{
Background = Color.FromRgb(0, 0, 255);
break;
}
}
}
Здесь мы вызываем с помощью метода DisplayActionSheet() диалоговое окно, в котором предлагаем пользователю выбрать цвет фона страницы или отменить действие. Запустим приложение и проверим результат. Вызов диалогового окна при клике по кнопке:
После выбора одного из действий:
Метод Display Alert
public Task<bool> DisplayAlert(string title, string message, string accept, string cancel);
Метод выводит диалоговое окно с каким-либо сообщением и двумя кнопками «Принять» и «Отмена». Параметры метода следующие:
title— заголовок окнаmessage— сообщение пользователюaccept— текст кнопки «Принять»cancel— текст кнопки «Отмена»
Результатом выполнения метода является значение bool, которое указывает принял ли пользователь сообщение (true) или нажал кнопку «Отмена» (false). Используем этот метод в нашем приложении, изменив метод Click() следующим образом:
public async void Click(object sender, EventArgs e)
{
var result = await DisplayAlert("Вопрос", "Изменить цвет фона страницы на зеленый?", "Да", "Нет");
if (result)
{
Background = Color.FromRgb(0, 255, 0);
}
}
Запустим приложение и проверим результат:
Если нажать кнопку «Да», то цвет фона страницы изменится и станет как на рисунке выше. Если вам необходимо просто уведомить пользователя о чем-то, то можно использовать переопределенную версию метода в которой отсутствует параметр accept.
Метод Display Prompt Async
public Task<string> DisplayPromptAsync(string title, string message, string accept = "OK", string cancel = "Cancel", string placeholder = default, int maxLength = -1, Keyboard keyboard = default, string initialValue = "");
Этот метод позволяет вывести на экран диалоговое окно в котором пользователь должен ввести некоторое значение. Параметры метода следующие:
title— заголовок окнаmessage— сообщение пользователюaccept— текст кнопки «Принять»cancel— текст кнопки «Отмена»placeholder— строка-«заменитель», которая показывается в текстовом поле, когда оно не содержит никакого значенияmaxLength— максимально допустимая длина вводимого пользователем текстаKeyboard— клавиатура, которая будет показана пользователю (если приложение запускается, например, в Android)initialValue— начальное значение в поле ввода
Результатом выполнения метода будет введенное пользователем значение. Если пользователь нажмет кнопку «Отмена», то результатом метода будет null. Например,
public async void Click(object sender, EventArgs e)
{
var result = await DisplayPromptAsync("Вопрос", "Напишите \"Да\", если хотите изменить цвет фона на красный");
if ((result != null) && (result.ToUpper()=="ДА" ))
{
Background = Color.FromRgb(255, 0, 0);
}
}
Теперь, чтобы сменить цвет фона нам необходимо ввести строку:
Итого
Класс Page является базовым для прочих страниц приложения и, при этом, предоставляет нам достаточно много разнообразных свойств, событий и методов для работы. Так, в классе Page определены методы для вывода диалоговых окон, события, генерируемые при визуальном отображении страницы на экране и так далее.



