Упражнение. Реализация навигации по всплывающим элементам
В примере сценария у вас есть приложение .NET MAUI, содержащее страницы для отображения сведений об астрономических телах, фазах луны и времени восхода и заката. Приложение также содержит страницу "О программе". В настоящее время все эти страницы являются автономными, но вы хотите предоставить пользователю логичный способ перемещения между ними.
В этом упражнении вы добавите всплывающее меню навигации в приложение.
Этот модуль использует пакет SDK для .NET 9.0. Убедитесь, что установлен .NET 9.0, выполнив следующую команду в предпочтительном терминале команд:
dotnet --list-sdks
Выходные данные, аналогичные следующему примеру, отображаются:
8.0.100 [C:\Program Files\dotnet\sdk]
9.0.100 [C:\Program Files\dotnet\sdk]
Убедитесь, что в списке есть версия, которая начинается с цифры 9
. Если ни один из них отсутствует или команда не найдена, установите последний пакет SDK для .NET 9.0.
Открытие решения для начала работы
Клонируйте или скачайте репозиторий упражнения.
Примечание.
Рекомендуется клонировать или скачать содержимое упражнения по короткому пути к папке, например C:\dev, чтобы избежать превышения максимальной длины пути для созданных файлов.
Перейдите в папку exercise1 в клонированном репозитории, а затем перейдите в папку start.
Используйте Visual Studio, чтобы открыть решение Astronomy.sln или папку в Visual Studio Code.
В окне Обозреватель решений в проекте Astronomy разверните папку Pages. Эта папка содержит следующие страницы:
- AboutPage. На этой странице отображаются сведения о приложении.
- MoonPhasePage. На этой странице отображаются определенные сведения о фазах Луны.
- SunrisePage. На этой странице отображается время восхода и захода Солнца для расположений на Земле. Эти данные предоставляются веб-службой Sunrise Sunset.
Выполните сборку и запустите приложение. При запуске приложения отображается страница MoonPhasePage, но в настоящее время у пользователя нет способа перейти на другие страницы.
На следующем рисунке показано приложение, работающее в эмуляторе Android:
Закройте приложение и вернитесь в Visual Studio или Visual Studio Code.
Добавление всплывающих элементов
В окне Обозревателя решений откройте страницу AppShell.xaml.
В редакторе разметки XAML заключите существующий элемент
<ShellContent>
в<FlyoutItem>
. Задайте свойствоTitle
элемента<Flyout>
равным Moon Phase (Фаза Луны). Разметка должна выглядеть следующим образом:<FlyoutItem Title="Moon Phase"> <ShellContent ContentTemplate="{DataTemplate local:MoonPhasePage}"/> </FlyoutItem>
Добавьте свойство
FlyoutIcon
в узел<Shell>
для отображения изображения. По умолчанию он отображает три горизонтальных полосы, но мы можем изменить его на то, что нам нравится. Разметка должна выглядеть следующим образом:<Shell x:Class="Astronomy.AppShell" xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:Astronomy.Pages" FlyoutIcon="moon.png">
Запустите приложение. Теперь в левом верхнем углу приложения должно появиться изображение Луны.
Коснитесь значка, а всплывающий элемент появится.
Теперь добавьте другие всплывающие элементы. Создайте новый элемент
<FlyoutItem>
под созданным ранее и задайте для его параметраTitle
значение Sunrise (Восход). ПараметрShellContent
должен указывать на страницуSunrisePage
.Добавьте еще один элемент
<FlyoutItem>
, задайте для его заголовка значение About (О программе). Задайте для параметраShellContent
значениеAboutPage
. XAML для этих двух элементов должен выглядеть следующим образом:<FlyoutItem Title="Sunrise"> <ShellContent ContentTemplate="{DataTemplate local:SunrisePage}"/> </FlyoutItem> <FlyoutItem Title="About"> <ShellContent ContentTemplate="{DataTemplate local:AboutPage}"/> </FlyoutItem>
Снова запустите приложение, и теперь в всплывающем элементе есть три варианта. Касание всплывающего элемента отображает соответствующую страницу.
Примечание.
Если вы работаете на платформе, отличной от Windows, вам может потребоваться включить разрешение на доступ к данным о местоположении для приложения на этой платформе, чтобы страница Sunrise/Sunset Times (Время восхода/захода) могла работать. Например, на устройстве Android задайте для доступа к данным о местоположении значение Разрешить только при использовании приложения.
Добавление значков
Возможно, вы заметили, что всплывающие элементы выглядят немного пустыми. С помощью свойства Icon
можно добавлять значки во всплывающие элементы.
В папке Resources\Images уже есть изображения, которые можно использовать.
Задайте для свойства
Icon
первого элементаFlyoutItem
значение moon.png.<FlyoutItem Title="Moon Phase" Icon="moon.png"> <ShellContent ContentTemplate="{DataTemplate local:MoonPhasePage}" /> </FlyoutItem>
Повторите эти действия для двух других элементов, используя значения sun.png и question.png соответственно.
<FlyoutItem Title="Sunrise" Icon="sun.png"> <ShellContent ContentTemplate="{DataTemplate local:SunrisePage}"/> </FlyoutItem> <FlyoutItem Title="About" Icon="question.png"> <ShellContent ContentTemplate="{DataTemplate local:AboutPage}"/> </FlyoutItem>
Запустите приложение и откройте всплывающее меню. Каждый всплывающий элемент теперь имеет значок, связанный с ним.
Добавление заголовка всплывающего меню
Всплывающие элементы находятся в верхней части всплывающего меню, что затрудняет их различать. Мы можем добавить некоторое пространство в верхнюю часть и даже целый элемент View
с помощью <Shell.FlyoutHeader>
.
Добавьте всплывающий заголовок в качестве дочернего
<Shell>
элемента узла:<Shell.FlyoutHeader> </Shell.FlyoutHeader>
Вы можете создать любую иерархию представлений
<Shell.FlyoutHeader>
, которую вы хотите создать в пределах . Давайте поместимGrid
иImage
.<Shell.FlyoutHeader> <Grid HeightRequest="100" BackgroundColor="DarkSlateBlue"> <Image Source="moon.png" /> </Grid> </Shell.FlyoutHeader>