TabbedPage
Многоплатформенный пользовательский интерфейс приложения .NET (.NET MAUI) TabbedPage поддерживает коллекцию дочерних элементов типа Page, только одна из которых полностью видна одновременно. Каждый дочерний элемент определяется рядом вкладок в верхней или нижней части страницы. Как правило, каждый дочерний элемент будет и ContentPage при выборе ее вкладки отображается содержимое страницы.
TabbedPage определяет следующие свойства:
BarBackground
BrushТип , определяет фон панели вкладок.BarBackgroundColor
( тип Color) определяет цвет фона панели вкладок.BarTextColor
ColorТип , представляет цвет текста на панели вкладок.SelectedTabColor
ColorТип , указывает цвет вкладки при его выборе.UnselectedTabColor
ColorТип , представляет цвет вкладки при его выборе.
Эти свойства поддерживаются объектами BindableProperty, то есть эти свойства можно указывать в качестве целевых для привязки и стилизации данных.
Заголовок вкладки определяется свойством Page.Title дочерней страницы, а значок вкладки определяется Page.IconImageSource свойством дочерней страницы.
В TabbedPage каждый объект Page создается при формировании TabbedPage. Это может привести к плохому интерфейсу пользователя, особенно если TabbedPage это корневая страница вашего приложения. Однако оболочка .NET MAUI позволяет создавать страницы с помощью панели вкладок по запросу в ответ на навигацию. Дополнительные сведения о приложениях Оболочки см. в разделе Shell.
Предупреждение
TabbedPage несовместим с приложениями оболочки .NET MAUI Shell, и при попытке использовать TabbedPage в приложении оболочки исключение будет вызвано исключение.
Создание объекта TabbedPage
Создать TabbedPage можно двумя способами:
- Заполните TabbedPage коллекцией дочерних объектов Page, например ContentPage. Дополнительные сведения см. в разделе "Заполнение tabbedPage" коллекцией страниц.
- Назначьте коллекции свойство
ItemsSource
, а затем присвойте DataTemplate свойствуItemTemplate
для возврата станицы объектов в коллекции. Дополнительные сведения см. в разделе "Заполнение tabbedPage" с помощью DataTemplate.
Важно!
Объект должен TabbedPage быть заполнен NavigationPage только объектами и ContentPage объектами.
Независимо от подхода, расположение панели вкладок в ней TabbedPage зависит от платформы:
- В iOS список вкладок отображается в нижней части экрана, а содержимое страницы выше. Каждая вкладка состоит из заголовка и значка. В книжной ориентации значки панели вкладок отображаются над заголовками вкладок. В альбомной ориентации значки и заголовки отображаются рядом. Кроме того, в зависимости от устройства и ориентации может отображаться обычная или компактная панель вкладок. При наличии более пяти вкладок появляется вкладка Дополнительно, используемая для доступа к дополнительным вкладкам.
- В Android список вкладок отображается в верхней части экрана, а содержимое страницы находится ниже. Каждая вкладка состоит из заголовка и значка. Но эти вкладки можно переместить в нижнюю часть экрана в зависимости от конкретной платформы. При наличии более пяти вкладок, список которых отображается внизу экрана, появляется вкладка Дополнительно, которую можно использовать для доступа к дополнительным вкладкам. Сведения о перемещении вкладок в нижней части экрана см. в разделе "Размещение панели инструментов TabbedPage" в Android.
- В Windows список вкладок отображается в верхней части экрана, а содержимое страницы находится ниже. У каждой вкладки есть заголовок.
Заполнение TabbedPage коллекцией Page
Можно TabbedPage заполнить коллекцию дочерних Page объектов, которые обычно будут ContentPage объектами. Это достигается путем добавления ContentPage объектов в качестве дочерних TabbedPageобъектов:
<TabbedPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:TabbedPageWithNavigationPage"
x:Class="TabbedPageWithNavigationPage.MainPage">
<local:TodayPage />
<local:SchedulePage />
<local:SettingsPage />
</TabbedPage>
Page Объекты, добавляемые в качестве дочерних TabbedPage элементов, добавляются в коллекцию Children
. Свойство Children
класса MultiPage<T>
, из которого происходит TabbedPage, – это свойство ContentProperty
MultiPage<T>
. Таким образом, в XAML нет необходимости явно назначать объекты Page свойству Children
.
На следующем снимка экрана показан внешний вид результирующей панели вкладок на следующей TabbedPageпанели:
Содержимое страницы для вкладки отображается при выборе вкладки.
Заполнение tabbedPage с помощью DataTemplate
TabbedPageнаследует ItemsSource
свойства и SelectedItem
ItemTemplate
привязываемые MultiPage<T>
свойства из класса. Эти свойства позволяют динамически создавать TabbedPage дочерние объекты, устанавливая свойство в IEnumerable
коллекцию объектов с общедоступными свойствами, подходящими для привязок данных, и задав ItemsSource
ItemTemplate
свойству тип DataTemplate страницы в качестве корневого элемента.
В следующем примере показано динамическое создание дочерних TabbedPage элементов:
<TabbedPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:TabbedPageDemo"
x:Class="TabbedPageDemo.MainPage"
ItemsSource="{x:Static local:MonkeyDataModel.All}">
<TabbedPage.ItemTemplate>
<DataTemplate>
<ContentPage Title="{Binding Name}"
IconImageSource="monkeyicon.png">
<StackLayout Padding="5, 25">
<Label Text="{Binding Name}"
FontAttributes="Bold"
FontSize="18"
HorizontalOptions="Center" />
<Image Source="{Binding PhotoUrl}"
HorizontalOptions="Center"
WidthRequest="200"
HeightRequest="200" />
<StackLayout Padding="50, 10">
<StackLayout Orientation="Horizontal">
<Label Text="Family: "
FontAttributes="Bold" />
<Label Text="{Binding Family}" />
</StackLayout>
...
</StackLayout>
</StackLayout>
</ContentPage>
</DataTemplate>
</TabbedPage.ItemTemplate>
</TabbedPage>
В этом примере каждая вкладка состоит из объекта ContentPage, который использует объекты Image и Label для вывода данных на вкладку:
Перемещение в пределах вкладки
Навигация может выполняться на вкладке, при условии, что ContentPage объект упакован в NavigationPage объект:
<TabbedPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:TabbedPageWithNavigationPage"
x:Class="TabbedPageWithNavigationPage.MainPage">
<local:TodayPage />
<NavigationPage Title="Schedule"
IconImageSource="schedule.png">
<x:Arguments>
<local:SchedulePage />
</x:Arguments>
</NavigationPage>
</TabbedPage>
В этом примере TabbedPage заполнена двумя объектами Page. Первый дочерний ContentPage объект является объектом, а второй дочерний — NavigationPage это объект, содержащий ContentPage объект.
ContentPage При оболочке в NavigationPageвиде переадресации навигации по страницам переадресации можно выполнить путем вызова PushAsync
метода в Navigation
свойстве ContentPage объекта:
await Navigation.PushAsync(new UpcomingAppointmentsPage());
Дополнительные сведения о выполнении навигации с помощью класса см. в NavigationPage разделе NavigationPage.
Предупреждение
Хотя NavigationPage можно поместить в TabbedPage, не рекомендуется размещать TabbedPage в NavigationPage.