Bagikan melalui


Xamarin.Forms dalam Proyek Asli Xamarin

Biasanya, aplikasi Xamarin.Forms menyertakan satu atau beberapa halaman yang berasal dari ContentPage, dan halaman ini dibagikan oleh semua platform dalam proyek pustaka Standar .NET atau Proyek Bersama. Namun, Native Forms ContentPagememungkinkan halaman -turunan ditambahkan langsung ke aplikasi Xamarin.iOS, Xamarin.Android, dan UWP asli. Dibandingkan dengan memiliki proyek asli mengkonsumsi ContentPagehalaman -turunan dari proyek pustaka .NET Standard atau Proyek Bersama, keuntungan menambahkan halaman langsung ke proyek asli adalah bahwa halaman dapat diperluas dengan tampilan asli. Tampilan asli kemudian dapat dinamai di XAML dengan x:Name dan dirujuk dari kode di belakang. Untuk informasi selengkapnya tentang tampilan asli, lihat Tampilan Asli.

Proses untuk mengkonsumsi Xamarin.FormsContentPagehalaman -turunan dalam proyek asli adalah sebagai berikut:

  1. Xamarin.Forms Tambahkan paket NuGet ke proyek asli.
  2. ContentPageTambahkan halaman -turunan, dan dependensi apa pun, ke proyek asli.
  3. Panggil Forms.Init metode.
  4. Buat instans ContentPagehalaman -turunan dan konversikan ke jenis asli yang sesuai menggunakan salah satu metode ekstensi berikut: CreateViewController untuk iOS, CreateSupportFragment untuk Android, atau CreateFrameworkElement untuk UWP.
  5. Navigasikan ke representasi jenis asli halaman ContentPage-turunan menggunakan API navigasi asli.

Xamarin.Forms harus diinisialisasi dengan memanggil Forms.Init metode sebelum proyek asli dapat membangun ContentPagehalaman -turunan. Memilih kapan harus melakukan ini terutama tergantung pada kapan paling nyaman dalam alur aplikasi Anda - itu dapat dilakukan pada startup aplikasi, atau tepat sebelum ContentPagehalaman -turunan dibangun. Dalam artikel ini, dan aplikasi sampel yang menyertainya Forms.Init , metode ini dipanggil saat pengaktifan aplikasi.

Catatan

Solusi aplikasi sampel NativeForms tidak berisi proyek apa pun Xamarin.Forms . Sebaliknya, ini terdiri dari proyek Xamarin.iOS, proyek Xamarin.Android, dan proyek UWP. Setiap proyek adalah proyek asli yang menggunakan Formulir Asli untuk mengonsumsi ContentPagehalaman -turunan. Namun, tidak ada alasan mengapa proyek asli tidak dapat menggunakan ContentPagehalaman -turunan dari proyek pustaka .NET Standard atau Proyek Bersama.

Saat menggunakan Formulir Asli, Xamarin.Forms fitur seperti DependencyService, , MessagingCenterdan mesin pengikatan data, semuanya masih berfungsi. Namun, navigasi halaman harus dilakukan menggunakan API navigasi asli.

iOS

Di iOS, penimpaan FinishedLaunchingAppDelegate di kelas biasanya merupakan tempat untuk melakukan tugas terkait startup aplikasi. Ini dipanggil setelah aplikasi diluncurkan, dan biasanya ditimpa untuk mengonfigurasi jendela utama dan melihat pengontrol. Contoh kode berikut menunjukkan AppDelegate kelas dalam aplikasi sampel:

[Register("AppDelegate")]
public class AppDelegate : UIApplicationDelegate
{
    public static AppDelegate Instance;
    UIWindow _window;
    AppNavigationController _navigation;

    public static string FolderPath { get; private set; }

    public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
    {
        Forms.Init();

        // Create app-level resource dictionary.
        Xamarin.Forms.Application.Current = new Xamarin.Forms.Application();
        Xamarin.Forms.Application.Current.Resources = new MyDictionary();

        Instance = this;
        _window = new UIWindow(UIScreen.MainScreen.Bounds);

        UINavigationBar.Appearance.SetTitleTextAttributes(new UITextAttributes
        {
            TextColor = UIColor.Black
        });

        FolderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData));

        NotesPage notesPage = new NotesPage()
        {
            // Set the parent so that the app-level resource dictionary can be located.
            Parent = Xamarin.Forms.Application.Current
        };

        UIViewController notesPageController = notesPage.CreateViewController();
        notesPageController.Title = "Notes";

        _navigation = new AppNavigationController(notesPageController);

        _window.RootViewController = _navigation;
        _window.MakeKeyAndVisible();

        notesPage.Parent = null;
        return true;
    }
    // ...
}

Metode FinishedLaunching ini melakukan tugas-tugas berikut:

  • Xamarin.Forms diinisialisasi dengan memanggil Forms.Init metode .
  • Objek baru Xamarin.Forms.Application dibuat, dan kamus sumber daya tingkat aplikasinya diatur ke ResourceDictionary yang ditentukan dalam XAML.
  • Referensi ke AppDelegate kelas disimpan di staticInstance bidang . Ini untuk menyediakan mekanisme bagi kelas lain untuk memanggil metode yang ditentukan di AppDelegate kelas .
  • UIWindow, yang merupakan kontainer utama untuk tampilan dalam aplikasi iOS asli, dibuat.
  • Properti FolderPath diinisialisasi ke jalur pada perangkat tempat data catatan akan disimpan.
  • Objek NotesPage dibuat, yang merupakan Xamarin.FormsContentPagehalaman -turunan yang ditentukan dalam XAML, dan induknya diatur ke objek yang dibuat Xamarin.Forms.Application sebelumnya.
  • Objek NotesPage dikonversi ke UIViewController menggunakan CreateViewController metode ekstensi.
  • Properti Title dari UIViewController diatur, yang akan ditampilkan pada UINavigationBar.
  • AppNavigationController dibuat untuk mengelola navigasi hierarkis. Ini adalah kelas pengontrol navigasi kustom, yang berasal dari UINavigationController. Objek AppNavigationController mengelola tumpukan pengontrol tampilan, dan yang UIViewController diteruskan ke konstruktor akan disajikan pada awalnya ketika AppNavigationController dimuat.
  • Objek AppNavigationController diatur sebagai tingkat UIViewController atas untuk UIWindow, dan UIWindow diatur sebagai jendela kunci untuk aplikasi dan dibuat terlihat.
  • Properti ParentNotesPage objek diatur ke , untuk mencegah kebocoran nullmemori.

Setelah metode dijalankan, UI yang ditentukan di Xamarin.FormsNotesPage kelas akan ditampilkan, seperti yang FinishedLaunching ditunjukkan pada cuplikan layar berikut:

Cuplikan layar memperlihatkan layar Catatan di perangkat seluler.

Penting

Semua ContentPagehalaman -turunan dapat menggunakan sumber daya yang ditentukan dalam tingkat ResourceDictionaryaplikasi , asalkan Parent properti halaman diatur ke Application objek .

Berinteraksi dengan UI, misalnya dengan mengetuk +Button, akan mengakibatkan penanganan aktivitas berikut dalam NotesPage eksekusi kode di belakang:

void OnNoteAddedClicked(object sender, EventArgs e)
{
    AppDelegate.Instance.NavigateToNoteEntryPage(new Note());
}

Bidang staticAppDelegate.Instance memungkinkan AppDelegate.NavigateToNoteEntryPage metode dipanggil, yang diperlihatkan dalam contoh kode berikut:

public void NavigateToNoteEntryPage(Note note)
{
    NoteEntryPage noteEntryPage = new NoteEntryPage
    {
        BindingContext = note,
        // Set the parent so that the app-level resource dictionary can be located.
        Parent = Xamarin.Forms.Application.Current
    };

    var noteEntryViewController = noteEntryPage.CreateViewController();
    noteEntryViewController.Title = "Note Entry";

    _navigation.PushViewController(noteEntryViewController, true);
    noteEntryPage.Parent = null;
}

Metode mengonversi NavigateToNoteEntryPageContentPageXamarin.Formshalaman -turunan menjadi UIViewController dengan CreateViewController metode ekstensi, dan mengatur Title properti dari UIViewController. kemudian UIViewController didorong ke AppNavigationControllerPushViewController dengan metode . Oleh karena itu, UI yang ditentukan dalam Xamarin.FormsNoteEntryPage kelas akan ditampilkan, seperti yang ditunjukkan pada cuplikan layar berikut:

Cuplikan layar memperlihatkan Entri Catatan di perangkat seluler.

NoteEntryPage Ketika ditampilkan, navigasi belakang akan memunculkan UIViewController untuk NoteEntryPage kelas dari AppNavigationController, mengembalikan pengguna ke UIViewController untuk NotesPage kelas . Namun, muncul UIViewController dari tumpukan navigasi asli iOS tidak secara otomatis membuang UIViewController objek yang terpasang Page dan . Oleh karena itu, AppNavigationController kelas mengambil alih PopViewController metode , untuk membuang pengontrol tampilan pada navigasi mundur:

public class AppNavigationController : UINavigationController
{
    //...
    public override UIViewController PopViewController(bool animated)
    {
        UIViewController topView = TopViewController;
        if (topView != null)
        {
            // Dispose of ViewController on back navigation.
            topView.Dispose();
        }
        return base.PopViewController(animated);
    }
}

Penimpaan PopViewControllerDispose memanggil metode pada UIViewController objek yang telah dimunculkan dari tumpukan navigasi asli iOS. Kegagalan untuk melakukan ini akan mengakibatkan UIViewControllerPage objek yang terpasang dan menjadi yatim piatu.

Penting

Objek yatim piatu tidak dapat dikumpulkan sampah, sehingga mengakibatkan kebocoran memori.

Android

Di Android, OnCreate penimpaan MainActivity di kelas biasanya merupakan tempat untuk melakukan tugas terkait startup aplikasi. Contoh kode berikut menunjukkan MainActivity kelas dalam aplikasi sampel:

public class MainActivity : AppCompatActivity
{
    public static string FolderPath { get; private set; }

    public static MainActivity Instance;

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        Forms.Init(this, bundle);

        // Create app-level resource dictionary.
        Xamarin.Forms.Application.Current = new Xamarin.Forms.Application();
        Xamarin.Forms.Application.Current.Resources = new MyDictionary();

        Instance = this;

        SetContentView(Resource.Layout.Main);
        var toolbar = FindViewById<Toolbar>(Resource.Id.toolbar);
        SetSupportActionBar(toolbar);
        SupportActionBar.Title = "Notes";

        FolderPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData));

        NotesPage notesPage = new NotesPage()
        {
            // Set the parent so that the app-level resource dictionary can be located.
            Parent = Xamarin.Forms.Application.Current
        };
        AndroidX.Fragment.App.Fragment notesPageFragment = notesPage.CreateSupportFragment(this);

        SupportFragmentManager
            .BeginTransaction()
            .Replace(Resource.Id.fragment_frame_layout, mainPage)
            .Commit();
        //...

        notesPage.Parent = null;
    }
    ...
}

Metode OnCreate ini melakukan tugas-tugas berikut:

  • Xamarin.Forms diinisialisasi dengan memanggil Forms.Init metode .
  • Objek baru Xamarin.Forms.Application dibuat, dan kamus sumber daya tingkat aplikasinya diatur ke ResourceDictionary yang ditentukan dalam XAML.
  • Referensi ke MainActivity kelas disimpan di staticInstance bidang . Ini untuk menyediakan mekanisme bagi kelas lain untuk memanggil metode yang ditentukan di MainActivity kelas .
  • Konten Activity diatur dari sumber daya tata letak. Dalam aplikasi sampel, tata letak terdiri dari LinearLayout yang berisi Toolbar, dan FrameLayout untuk bertindak sebagai kontainer fragmen.
  • Toolbar diambil dan diatur sebagai bilah tindakan untuk Activity, dan judul bilah tindakan diatur.
  • Properti FolderPath diinisialisasi ke jalur pada perangkat tempat data catatan akan disimpan.
  • Objek NotesPage dibuat, yang merupakan Xamarin.FormsContentPagehalaman -turunan yang ditentukan dalam XAML, dan induknya diatur ke objek yang dibuat Xamarin.Forms.Application sebelumnya.
  • Objek NotesPage dikonversi ke Fragment menggunakan CreateSupportFragment metode ekstensi.
  • Kelas SupportFragmentManager membuat dan menerapkan transaksi yang menggantikan instans FrameLayout dengan Fragment untuk NotesPage kelas .
  • Properti ParentNotesPage objek diatur ke , untuk mencegah kebocoran nullmemori.

Untuk informasi selengkapnya tentang Fragmen, lihat Fragmen.

Setelah metode dijalankan, UI yang ditentukan di Xamarin.FormsNotesPage kelas akan ditampilkan, seperti yang OnCreate ditunjukkan pada cuplikan layar berikut:

Cuplikan layar memperlihatkan layar Catatan di perangkat seluler dengan banner biru dan teks catatan berwarna.

Penting

Semua ContentPagehalaman -turunan dapat menggunakan sumber daya yang ditentukan dalam tingkat ResourceDictionaryaplikasi , asalkan Parent properti halaman diatur ke Application objek .

Berinteraksi dengan UI, misalnya dengan mengetuk +Button, akan mengakibatkan penanganan aktivitas berikut dalam NotesPage eksekusi kode di belakang:

void OnNoteAddedClicked(object sender, EventArgs e)
{
    MainActivity.Instance.NavigateToNoteEntryPage(new Note());
}

Bidang staticMainActivity.Instance memungkinkan MainActivity.NavigateToNoteEntryPage metode dipanggil, yang diperlihatkan dalam contoh kode berikut:

public void NavigateToNoteEntryPage(Note note)
{
    NoteEntryPage noteEntryPage = new NoteEntryPage
    {
        BindingContext = note,
        // Set the parent so that the app-level resource dictionary can be located.
        Parent = Xamarin.Forms.Application.Current
    };

    AndroidX.Fragment.App.Fragment noteEntryFragment = noteEntryPage.CreateSupportFragment(this);
    SupportFragmentManager
        .BeginTransaction()
        .AddToBackStack(null)
        .Replace(Resource.Id.fragment_frame_layout, noteEntryFragment)
        .Commit();

    noteEntryPage.Parent = null;
}

Metode mengonversi NavigateToNoteEntryPageContentPageXamarin.Formshalaman -turunan menjadi Fragment dengan CreateSupportFragment metode ekstensi, dan menambahkan Fragment ke tumpukan kembali fragmen. Oleh karena itu, UI yang ditentukan dalam Xamarin.FormsNoteEntryPage akan ditampilkan, seperti yang ditunjukkan pada cuplikan layar berikut:

Cuplikan layar memperlihatkan Entri Catatan di perangkat seluler dengan banner biru.

NoteEntryPage Saat ditampilkan, mengetuk panah belakang akan memunculkan Fragment dari NoteEntryPage tumpukan belakang fragmen, mengembalikan pengguna ke Fragment kelas .NotesPage

Mengaktifkan kembali dukungan navigasi

Kelas SupportFragmentManager memiliki BackStackChanged peristiwa yang diaktifkan setiap kali konten tumpukan kembali fragmen berubah. Metode OnCreate di MainActivity kelas berisi penanganan aktivitas anonim untuk peristiwa ini:

SupportFragmentManager.BackStackChanged += (sender, e) =>
{
    bool hasBack = SupportFragmentManager.BackStackEntryCount > 0;
    SupportActionBar.SetHomeButtonEnabled(hasBack);
    SupportActionBar.SetDisplayHomeAsUpEnabled(hasBack);
    SupportActionBar.Title = hasBack ? "Note Entry" : "Notes";
};

Penanganan aktivitas ini menampilkan tombol kembali pada bilah tindakan asalkan ada satu atau beberapa Fragment instans pada tumpukan kembali fragmen. Respons untuk mengetuk tombol kembali ditangani oleh penimpaan OnOptionsItemSelected :

public override bool OnOptionsItemSelected(Android.Views.IMenuItem item)
{
    if (item.ItemId == global::Android.Resource.Id.Home && SupportFragmentManager.BackStackEntryCount > 0)
    {
        SupportFragmentManager.PopBackStack();
        return true;
    }
    return base.OnOptionsItemSelected(item);
}

Penimpaan OnOptionsItemSelected dipanggil setiap kali item di menu opsi dipilih. Implementasi ini memunculkan fragmen saat ini dari tumpukan kembali fragmen, asalkan tombol kembali telah dipilih dan ada satu atau beberapa Fragment instans pada tumpukan belakang fragmen.

Beberapa aktivitas

Ketika aplikasi terdiri dari beberapa aktivitas, ContentPagehalaman -turunan dapat disematkan ke dalam setiap aktivitas. Dalam skenario ini, Forms.Init metode perlu dipanggil hanya dalam OnCreate penimpaan yang pertama Activity yang menyematkan Xamarin.FormsContentPage. Namun, ini memiliki dampak berikut:

  • Nilai Xamarin.Forms.Color.Accent akan diambil dari Activity yang disebut Forms.Init metode .
  • Nilai Xamarin.Forms.Application.Current akan dikaitkan dengan Activity yang disebut Forms.Init metode .

Pilih file

Saat menyematkan halaman -turunan ContentPageyang menggunakan WebView yang perlu mendukung tombol HTML "Pilih File", Activity harus mengambil alih OnActivityResult metode:

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);
    ActivityResultCallbackRegistry.InvokeCallback(requestCode, resultCode, data);
}

UWP

Pada UWP, kelas asli App biasanya merupakan tempat untuk melakukan tugas terkait startup aplikasi. Xamarin.Forms biasanya diinisialisasi, dalam Xamarin.Forms aplikasi UWP, dalam OnLaunched penimpaan di kelas asli App , untuk meneruskan LaunchActivatedEventArgs argumen ke Forms.Init metode . Untuk alasan ini, aplikasi UWP asli yang mengonsumsi Xamarin.FormsContentPagehalaman -turunan dapat dengan mudah memanggil Forms.Init metode dari App.OnLaunched metode :

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    // ...
    Xamarin.Forms.Forms.Init(e);

    // Create app-level resource dictionary.
    Xamarin.Forms.Application.Current = new Xamarin.Forms.Application();
    Xamarin.Forms.Application.Current.Resources = new MyDictionary();

    // ...
}

Selain itu, metode ini OnLaunched juga dapat membuat kamus sumber daya tingkat aplikasi apa pun yang diperlukan oleh aplikasi.

Secara default, kelas asli App meluncurkan MainPage kelas sebagai halaman pertama aplikasi. Contoh kode berikut menunjukkan MainPage kelas dalam aplikasi sampel:

public sealed partial class MainPage : Page
{
    NotesPage notesPage;
    NoteEntryPage noteEntryPage;

    public static MainPage Instance;
    public static string FolderPath { get; private set; }

    public MainPage()
    {
        this.NavigationCacheMode = NavigationCacheMode.Enabled;
        Instance = this;
        FolderPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData));

        notesPage = new Notes.UWP.Views.NotesPage
        {
            // Set the parent so that the app-level resource dictionary can be located.
            Parent = Xamarin.Forms.Application.Current
        };
        this.Content = notesPage.CreateFrameworkElement();
        // ...
        notesPage.Parent = null;    
    }
    // ...
}

MainPage Konstruktor melakukan tugas-tugas berikut:

  • Penembolokan diaktifkan untuk halaman, sehingga baru MainPage tidak dibangun saat pengguna menavigasi kembali ke halaman.
  • Referensi ke MainPage kelas disimpan di staticInstance bidang . Ini untuk menyediakan mekanisme bagi kelas lain untuk memanggil metode yang ditentukan di MainPage kelas .
  • Properti FolderPath diinisialisasi ke jalur pada perangkat tempat data catatan akan disimpan.
  • Objek NotesPage dibuat, yang merupakan Xamarin.FormsContentPagehalaman -turunan yang ditentukan dalam XAML, dan induknya diatur ke objek yang dibuat Xamarin.Forms.Application sebelumnya.
  • Objek NotesPage dikonversi ke FrameworkElement menggunakan CreateFrameworkElement metode ekstensi, lalu diatur sebagai konten MainPage kelas.
  • Properti ParentNotesPage objek diatur ke , untuk mencegah kebocoran nullmemori.

MainPage Setelah konstruktor dijalankan, UI yang ditentukan dalam Xamarin.FormsNotesPage kelas akan ditampilkan, seperti yang ditunjukkan pada cuplikan layar berikut:

Cuplikan layar memperlihatkan halaman Catatan dengan catatan dan tanggal/waktu.

Penting

Semua ContentPagehalaman -turunan dapat menggunakan sumber daya yang ditentukan dalam tingkat ResourceDictionaryaplikasi , asalkan Parent properti halaman diatur ke Application objek .

Berinteraksi dengan UI, misalnya dengan mengetuk +Button, akan mengakibatkan penanganan aktivitas berikut dalam NotesPage eksekusi kode di belakang:

void OnNoteAddedClicked(object sender, EventArgs e)
{
    MainPage.Instance.NavigateToNoteEntryPage(new Note());
}

Bidang staticMainPage.Instance memungkinkan MainPage.NavigateToNoteEntryPage metode dipanggil, yang diperlihatkan dalam contoh kode berikut:

public void NavigateToNoteEntryPage(Note note)
{
    noteEntryPage = new Notes.UWP.Views.NoteEntryPage
    {
        BindingContext = note,
        // Set the parent so that the app-level resource dictionary can be located.
        Parent = Xamarin.Forms.Application.Current
    };
    this.Frame.Navigate(noteEntryPage);
    noteEntryPage.Parent = null;
}

Navigasi di UWP biasanya dilakukan dengan Frame.Navigate metode , yang mengambil Page argumen. Xamarin.Formsmenentukan metode ekstensi yang mengambil ContentPageinstans Frame.Navigate halaman -turunan. Oleh karena itu, ketika NavigateToNoteEntryPage metode dijalankan, UI yang ditentukan dalam Xamarin.FormsNoteEntryPage akan ditampilkan, seperti yang ditunjukkan pada cuplikan layar berikut:

Cuplikan layar memperlihatkan halaman Catatan dengan kotak teks dengan catatan dimasukkan.

NoteEntryPage Saat ditampilkan, mengetuk panah belakang akan memunculkan FrameworkElement dari NoteEntryPage tumpukan belakang dalam aplikasi, mengembalikan pengguna ke FrameworkElement kelas .NotesPage

Mengaktifkan dukungan pengulangan ukuran halaman

Ketika jendela aplikasi UWP diubah ukurannya, konten juga harus diubah ukurannya Xamarin.Forms . Hal ini dilakukan dengan mendaftarkan penanganan aktivitas untuk peristiwa tersebut Loaded , di MainPage konstruktor:

public MainPage()
{
    // ...
    this.Loaded += OnMainPageLoaded;
    // ...
}

Peristiwa diaktifkan Loaded ketika halaman ditata, dirender, dan siap untuk interaksi, dan menjalankan OnMainPageLoaded metode sebagai respons:

void OnMainPageLoaded(object sender, RoutedEventArgs e)
{
    this.Frame.SizeChanged += (o, args) =>
    {
        if (noteEntryPage != null)
            noteEntryPage.Layout(new Xamarin.Forms.Rectangle(0, 0, args.NewSize.Width, args.NewSize.Height));
        else
            notesPage.Layout(new Xamarin.Forms.Rectangle(0, 0, args.NewSize.Width, args.NewSize.Height));
    };
}

Metode ini OnMainPageLoaded mendaftarkan penanganan aktivitas anonim untuk Frame.SizeChanged peristiwa, yang dinaikkan ketika ActualHeight atau ActualWidth properti berubah pada Frame. Sebagai respons, Xamarin.Forms konten untuk halaman aktif diubah ukurannya dengan memanggil Layout metode .

Mengaktifkan kembali dukungan navigasi

Pada UWP, aplikasi harus mengaktifkan navigasi balik untuk semua tombol kembali perangkat keras dan perangkat lunak, di berbagai faktor bentuk perangkat. Ini dapat dicapai dengan mendaftarkan penanganan aktivitas untuk peristiwa, BackRequested yang dapat dilakukan di MainPage konstruktor:

public MainPage()
{
    // ...
    SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
}

Ketika aplikasi diluncurkan, GetForCurrentView metode mengambil objek yang SystemNavigationManager terkait dengan tampilan saat ini, lalu mendaftarkan penanganan aktivitas untuk peristiwa tersebut BackRequested . Aplikasi hanya menerima peristiwa ini jika ini adalah aplikasi latar depan, dan sebagai respons, memanggil penanganan OnBackRequested aktivitas:

void OnBackRequested(object sender, BackRequestedEventArgs e)
{
    Frame rootFrame = Window.Current.Content as Frame;
    if (rootFrame.CanGoBack)
    {
        e.Handled = true;
        rootFrame.GoBack();
        noteEntryPage = null;
    }
}

Penanganan OnBackRequested aktivitas memanggil GoBack metode pada bingkai akar aplikasi dan mengatur BackRequestedEventArgs.Handled properti untuk true menandai peristiwa sebagai ditangani. Kegagalan untuk menandai peristiwa sebagai ditangani dapat mengakibatkan peristiwa diabaikan.

Aplikasi memilih apakah akan menampilkan tombol kembali pada bilah judul. Ini dicapai dengan mengatur AppViewBackButtonVisibility properti ke salah AppViewBackButtonVisibility satu nilai enumerasi, di App kelas :

void OnNavigated(object sender, NavigationEventArgs e)
{
    SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility =
        ((Frame)sender).CanGoBack ? AppViewBackButtonVisibility.Visible : AppViewBackButtonVisibility.Collapsed;
}

Penanganan OnNavigated aktivitas, yang dijalankan sebagai respons terhadap Navigated penembakan peristiwa, memperbarui visibilitas tombol kembali bilah judul saat navigasi halaman terjadi. Ini memastikan bahwa tombol kembali bilah judul terlihat jika tumpukan kembali dalam aplikasi tidak kosong, atau dihapus dari bilah judul jika tumpukan belakang dalam aplikasi kosong.

Untuk informasi selengkapnya tentang dukungan navigasi belakang di UWP, lihat Riwayat navigasi dan navigasi mundur untuk aplikasi UWP.