Страница FlyoutPage в .NET MAUI оперирует сразу двумя страницами приложения — страницей бокового меню в котором мы можем располагать, например, ссылки на другие страницы приложения и непосредственно страницей с элементами управления.
Свойства FlyoutPage
Страница FlayoutPage предоставляет нам следующие свойства для работы:
| Свойство | Тип | Описание |
Detail |
Page |
Страница с содержимым |
Flyout |
Page |
Страница-меню |
FlyoutLayoutBehavior |
FlyoutLayoutBehavior |
Поведение макета страницы. Может принимать следующие значения:
|
IsGestureEnabled |
bool |
Определяет, будет ли жест прокрутки использоваться для показа бокового меню. Значение по умолчанию — true |
IsPresented |
bool |
Определяет, отображается ли всплывающее меню или страница сведений. Значение по умолчанию — false |
Рассмотрим использование этих свойств на примере.
Создание FlayoutPage
Создадим новое приложение .NET MAUI и внесем в него следующие изменения. Во-первых, добавим в проект новую страницу ContentPage, которую назовем MenuPage:
Эта страница будет выступать в качестве меню. Изменим 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="Flyout.MenuPage"
Title="MenuPage">
<VerticalStackLayout Padding="10">
<Label
Text="Меню приложения"
VerticalOptions="Center"
HorizontalOptions="Center" />
<Button Text="Кнопка"/>
</VerticalStackLayout>
</ContentPage>
Теперь нам необходимо создать страницу, на которой будут отображаться элементы управления. Добавим в проект новую страницу с названием DetailPage и изменим её 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="Flyout.DetailPage"
Title="DetailPage">
<VerticalStackLayout>
<Label
Text="Detail Page"
VerticalOptions="Center"
HorizontalOptions="Center" />
</VerticalStackLayout>
</ContentPage>
Таким образом, теперь структура нашего проекта будет следующей:
В качестве FlyoutPage у нас будет выступать страница MainPage. Изменим её XAML-код следующим образом:
<?xml version="1.0" encoding="utf-8" ?>
<FlyoutPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Flyout.MainPage"
xmlns:local="clr-namespace:Flyout"
FlyoutLayoutBehavior="Popover">
<FlyoutPage.Flyout>
<local:MenuPage/>
</FlyoutPage.Flyout>
<FlyoutPage.Detail>
<NavigationPage>
<x:Arguments>
<local:DetailPage/>
</x:Arguments>
</NavigationPage>
</FlyoutPage.Detail>
</FlyoutPage>
Здесь мы определили в качестве меню страницу MenuPage:
<FlyoutPage.Flyout>
<local:MenuPage/>
</FlyoutPage.Flyout>
а в качестве страницы с данными — NavigationPage которой передали в качестве аргумента конструктора нашу страницу DetailPage
<FlyoutPage.Detail>
<NavigationPage>
<x:Arguments>
<local:DetailPage/>
</x:Arguments>
</NavigationPage>
</FlyoutPage.Detail>
Также, нам необходимо изменить в файле отдельного кода класс MainPage, сделав его наследником FlyoutPage:
namespace Flyout
{
public partial class MainPage : FlyoutPage
{
public MainPage()
{
InitializeComponent();
}
}
}
Теперь можно проверить результат. При первом запуске приложения боковое меню будет скрыто:
Вызов меню
Изменим поведение макета страницы, изменив значение свойства FlyoutLayoutBehavior на Split:
<FlyoutPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Flyout.MainPage"
xmlns:local="clr-namespace:Flyout"
FlyoutLayoutBehavior="Split">
Теперь в приложении боковое меню всегда будет видно на экране:
Итого
Страница FlyoutPage используется в .NET MAUI для создания страницы с боковым меню и оперирует сразу двумя страницами — страницей-меню (обычно это ContentPage) и страницей с данными (обычно это NavigationPage).

