Даже самое простое приложение содержит несколько страниц. Минимально — это основная страница и страница с настройками. В данной статье я покажу пример как реализовать переключение между страницами с помощью класса NavigationPage.
Этот класс организует навигацию между страницами приложения по методу стека. Т.е. каждый раз добавляя страницу в стек, вы делаете её активной. Пользователь при этом может воспользоваться навигационными клавишами устройства, чтобы вернуться к предыдущей странице приложения.
При инициализации приложения нужно добавить основную страницу в стек.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | using System; using Xamarin.Forms; using Xamarin.Forms.Xaml; namespace Demo_Line {     public partial class App : Application     {         public App()         {             InitializeComponent();             MainPage = new NavigationPage(new MainPage());         }     } } | 
MainPage — это класс, описывающий одну из страниц вашего приложения. Вот с таким xaml кодом:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"              xmlns:skia="clr-namespace:SkiaSharp.Views.Forms;assembly=SkiaSharp.Views.Forms"              x:Class="Demo_Line.MainPage"              Title="Demo Running Lines"              Appearing="OnAppearing">     <Grid BackgroundColor="Black">         <skia:SKCanvasView x:Name="canvasView" EnableTouchEvents="True"         PaintSurface="OnCanvasViewPaintSurface" Touch="OnTouch" />     </Grid> </ContentPage> | 
Как видите основным компонентом страницы является SKCanvasView, который обрабатывает события Touch. На него мы и добавим код переключения на другую страницу.
Я привожу здесь только интересующую нас часть кода, а именно обработку события Touch, с переключением на другую страницу.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | using System; using Xamarin.Forms; using SkiaSharp; using SkiaSharp.Views.Forms; using Xamarin.Essentials; namespace Demo_Line {     public partial class MainPage : ContentPage     {         public MainPage()         {             InitializeComponent();             ...         }         private void OnTouch(object sender, SKTouchEventArgs e)         {             switch (e.ActionType)             {                 case SKTouchAction.Pressed:                     // Переключаемся на другую страницу                     Navigation.PushAsync(new SettingsPage());                     break;             }             // we have handled these events             e.Handled = true;         }         void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args)         {            ...         }     } } | 
Если вам хотите закрыть текущую страницу, чтобы приложение вернулось к предыдущей, то вам нужно будет выполнить метод Navigation.PopAsync();
Представьте, что на второй странице есть кнопка, сохраняющая данные и закрывающая страницу, тогда код мог бы выглядеть примерно так:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | using System; using Xamarin.Forms; using Xamarin.Forms.Xaml; using Xamarin.Essentials; namespace Demo_Line {     public partial class SettingsPage : ContentPage     {         public SettingsPage()         {             InitializeComponent();         }         private void OnCloseButtonClicked(object sender, EventArgs e)         {             // какая работа по сохранению данных             ...             // вернемся к предыдущей странице приложения             Navigation.PopAsync();         }     } } |