Bagikan melalui


Xamarin.Forms Navigasi shell

Xamarin.Forms Shell menyertakan pengalaman navigasi berbasis URI yang menggunakan rute untuk menavigasi ke halaman mana pun dalam aplikasi, tanpa harus mengikuti hierarki navigasi yang ditetapkan. Selain itu, aplikasi ini juga menyediakan kemampuan untuk menavigasi kembali tanpa harus mengunjungi semua halaman di tumpukan navigasi.

Kelas Shell menentukan properti terkait navigasi berikut:

Properti BackButtonBehavior, CurrentItem, dan CurrentState didukung oleh BindableProperty objek, yang berarti bahwa properti ini dapat menjadi target pengikatan data.

Navigasi dijalankan dengan memanggil metode GoToAsync, dari kelas Shell. Saat navigasi akan dilakukan, Navigating peristiwa ditembakkan, dan Navigated peristiwa ditembakkan saat navigasi selesai.

Catatan

Navigasi masih dapat dilakukan di antara halaman dalam aplikasi Shell dengan menggunakan properti Navigasi . Untuk informasi selengkapnya, lihat Navigasi Hierarkis.

Rute

Navigasi dilakukan dalam aplikasi Shell dengan menentukan URI yang akan dinavigasi. URI navigasi dapat memiliki tiga komponen:

  • Rute, yang menentukan jalur ke konten yang ada sebagai bagian dari hierarki visual Shell.
  • Halaman. Halaman yang tidak ada dalam hierarki visual Shell dapat didorong ke tumpukan navigasi dari mana saja dalam aplikasi Shell. Misalnya, halaman detail tidak akan ditentukan dalam hierarki visual Shell, tetapi dapat didorong ke tumpukan navigasi sesuai keperluan.
  • Satu atau beberapa parameter kueri. Parameter kueri adalah parameter yang bisa diteruskan ke halaman tujuan saat menavigasi.

Saat URI navigasi menyertakan ketiga komponen, strukturnya adalah: //route/page?queryParameters

Mendaftarkan rute

Rute dapat didefinisikan pada FlyoutItemobjek , , TabBarTab, dan ShellContent , melalui propertinyaRoute:

<Shell ...>
    <FlyoutItem ...
                Route="animals">
        <Tab ...
             Route="domestic">
            <ShellContent ...
                          Route="cats" />
            <ShellContent ...
                          Route="dogs" />
        </Tab>
        <ShellContent ...
                      Route="monkeys" />
        <ShellContent ...
                      Route="elephants" />  
        <ShellContent ...
                      Route="bears" />
    </FlyoutItem>
    <ShellContent ...
                  Route="about" />                  
    ...
</Shell>

Catatan

Semua item dalam hierarki Shell memiliki rute yang terkait dengannya. Jika Anda tidak mengatur rute, rute dibuat saat runtime. Namun, rute yang dihasilkan tidak dijamin konsisten di berbagai sesi aplikasi.

Contoh di atas membuat hierarki rute berikut, yang dapat digunakan dalam navigasi terprogram:

animals
  domestic
    cats
    dogs
  monkeys
  elephants
  bears
about

Untuk menavigasi ke ShellContent objek untuk dogs rute, URI rute absolut adalah //animals/domestic/dogs. Demikian pula, untuk menavigasi ke ShellContent objek untuk about rute, URI rute absolut adalah //about.

Peringatan

ArgumentException Akan dilemparkan pada startup aplikasi jika rute duplikat terdeteksi. Pengecualian ini juga akan dilemparkan jika dua rute atau lebih pada tingkat yang sama dalam hierarki berbagi nama rute.

Mendaftarkan rute halaman detail

Di konstruktor subkelas Shell, atau lokasi lain yang berjalan sebelum rute dipanggil, rute tambahan dapat didaftarkan secara eksplisit untuk halaman detail apa pun yang tidak dinyatakan dalam hierarki visual Shell. Hal ini dicapai dengan metode Routing.RegisterRoute:

Routing.RegisterRoute("monkeydetails", typeof(MonkeyDetailPage));
Routing.RegisterRoute("beardetails", typeof(BearDetailPage));
Routing.RegisterRoute("catdetails", typeof(CatDetailPage));
Routing.RegisterRoute("dogdetails", typeof(DogDetailPage));
Routing.RegisterRoute("elephantdetails", typeof(ElephantDetailPage));

Contoh ini mendaftarkan halaman detail, yang tidak ditentukan dalam Shell subkelas, sebagai rute. Halaman detail ini kemudian dapat dinavigasi menggunakan navigasi berbasis URI, dari mana saja dalam aplikasi. Rute untuk halaman tersebut dikenal sebagai rute global.

Peringatan

Akan ArgumentException dilemparkan jika Routing.RegisterRoute metode mencoba mendaftarkan rute yang sama ke dua atau beberapa jenis yang berbeda.

Atau, halaman dapat didaftarkan di hierarki rute yang berbeda jika diperlukan:

Routing.RegisterRoute("monkeys/details", typeof(MonkeyDetailPage));
Routing.RegisterRoute("bears/details", typeof(BearDetailPage));
Routing.RegisterRoute("cats/details", typeof(CatDetailPage));
Routing.RegisterRoute("dogs/details", typeof(DogDetailPage));
Routing.RegisterRoute("elephants/details", typeof(ElephantDetailPage));

Contoh ini memungkinkan navigasi halaman kontekstual, di mana menavigasi ke details rute dari halaman untuk monkeys rute menampilkan MonkeyDetailPage. Demikian pula, menavigasi ke details rute dari halaman untuk elephants rute menampilkan ElephantDetailPage. Untuk informasi selengkapnya, lihat Navigasi kontekstual.

Catatan

Halaman yang rutenya telah didaftarkan dengan Routing.RegisterRoute metode dapat didaftarkan dengan metode , Routing.UnRegisterRoute jika diperlukan.

Melakukan navigasi

Untuk melakukan navigasi, referensi ke Shell subkelas harus terlebih dahulu diperoleh. Referensi ini dapat diperoleh dengan mentransmisikan properti ke App.Current.MainPageShell objek, atau melalui Shell.Current properti . Navigasi kemudian dapat dilakukan dengan memanggil GoToAsync metode pada Shell objek. Metode ini menavigasi ke ShellNavigationState dan mengembalikan Task yang akan selesai setelah animasi navigasi selesai. Objek ShellNavigationState dibangun oleh GoToAsync metode , dari string, atau Uri, dan memiliki properti yang Location diatur ke string argumen atau Uri .

Penting

Saat rute dari hierarki visual Shell dinavigasi, tumpukan navigasi tidak dibuat. Namun, ketika halaman yang tidak ada dalam hierarki visual Shell dinavigasi, tumpukan navigasi dibuat.

Status navigasi Shell objek saat ini dapat diambil melalui Shell.Current.CurrentState properti , yang mencakup URI rute yang ditampilkan di Location properti .

Rute absolut

Navigasi dapat dilakukan dengan menentukan URI absolut yang valid sebagai argumen ke GoToAsync metode :

await Shell.Current.GoToAsync("//animals/monkeys");

Contoh ini menavigasi ke halaman untuk monkeys rute, dengan rute yang ditentukan pada ShellContent objek. Objek ShellContent yang mewakili monkeys rute adalah anak dari FlyoutItem objek, yang rutenya adalah animals.

Rute relatif

Navigasi juga dapat dilakukan dengan menentukan URI relatif yang valid sebagai argumen ke GoToAsync metode . Sistem perutean akan mencoba mencocokkan URI dengan ShellContent objek. Oleh karena itu, jika semua rute dalam aplikasi unik, navigasi dapat dilakukan hanya dengan menentukan nama rute unik sebagai URI relatif.

Format rute relatif berikut didukung:

Format Deskripsi
rute Hierarki rute akan dicari untuk rute yang ditentukan, ke atas dari posisi saat ini. Halaman yang cocok akan didorong ke tumpukan navigasi.
/rute Hierarki rute akan dicari dari rute yang ditentukan, ke bawah dari posisi saat ini. Halaman yang cocok akan didorong ke tumpukan navigasi.
//rute Hierarki rute akan dicari untuk rute yang ditentukan, ke atas dari posisi saat ini. Halaman yang cocok akan menggantikan tumpukan navigasi.
///rute Hierarki rute akan dicari untuk rute yang ditentukan, ke bawah dari posisi saat ini. Halaman yang cocok akan menggantikan tumpukan navigasi.

Contoh berikut menavigasi ke halaman untuk monkeydetails rute:

await Shell.Current.GoToAsync("monkeydetails");

Dalam contoh ini, monkeyDetails rute dicari hingga halaman yang cocok ditemukan. Ketika halaman ditemukan, halaman didorong ke tumpukan navigasi.

Navigasi kontekstual

Rute relatif memungkinkan navigasi kontekstual. Misalnya, pertimbangkan hierarki rute berikut:

monkeys
  details
bears
  details

Ketika halaman terdaftar untuk monkeys rute ditampilkan, menavigasi ke details rute akan menampilkan halaman terdaftar untuk monkeys/details rute. Demikian pula, ketika halaman terdaftar untuk bears rute ditampilkan, menavigasi ke details rute akan menampilkan halaman terdaftar untuk bears/details rute. Untuk informasi tentang cara mendaftarkan rute dalam contoh ini, lihat Mendaftarkan rute halaman.

Navigasi mundur

Navigasi mundur dapat dijalankan dengan menentukan ".." sebagai argumen untuk metode GoToAsync:

await Shell.Current.GoToAsync("..");

Navigasi mundur dengan ".." juga dapat dikombinasikan dengan rute:

await Shell.Current.GoToAsync("../route");

Dalam contoh ini, navigasi mundur dilakukan, lalu navigasi ke rute yang ditentukan.

Penting

Menavigasi mundur dan ke rute tertentu hanya dimungkinkan jika navigasi mundur menempatkan Anda di lokasi saat ini dalam hierarki rute untuk menavigasi ke rute yang ditentukan.

Demikian pula, Anda dapat menavigasi mundur beberapa kali, lalu menavigasi ke rute tertentu:

await Shell.Current.GoToAsync("../../route");

Dalam contoh ini, navigasi mundur dilakukan dua kali, lalu navigasi ke rute yang ditentukan.

Selain itu, data dapat diteruskan melalui properti kueri saat menavigasi mundur:

await Shell.Current.GoToAsync($"..?parameterToPassBack={parameterValueToPassBack}");

Dalam contoh ini, navigasi mundur dilakukan, dan nilai parameter kueri diteruskan ke parameter kueri di halaman sebelumnya.

Catatan

Parameter kueri dapat ditambahkan ke permintaan navigasi mundur apa pun.

Untuk informasi selengkapnya tentang meneruskan data saat menavigasi, lihat Meneruskan data.

Rute tidak valid

Format rute berikut tidak valid:

Format Penjelasan
//halaman atau ///page Rute global saat ini tidak dapat menjadi satu-satunya halaman pada tumpukan navigasi. Oleh karena itu, perutean absolut ke rute global tidak didukung.

Penggunaan format rute ini menghasilkan yang Exception dilemparkan.

Peringatan

Mencoba menavigasi ke rute yang tidak ada menghasilkan pengecualian yang ArgumentException dilemparkan.

Navigasi penelusuran kesalahan

Beberapa kelas Shell dihiasi dengan DebuggerDisplayAttribute, yang menentukan bagaimana kelas atau bidang ditampilkan oleh debugger. Ini dapat membantu men-debug permintaan navigasi dengan menampilkan data yang terkait dengan permintaan navigasi. Misalnya, cuplikan layar berikut menunjukkan CurrentItem properti Shell.Current dan CurrentState objek:

Cuplikan layar debugger

Dalam contoh ini, CurrentItem properti, jenis FlyoutItem, menampilkan judul dan rute FlyoutItem objek. Demikian pula, CurrentState properti, dari jenis ShellNavigationState, menampilkan URI rute yang ditampilkan dalam aplikasi Shell.

Kelas Tab menentukan Stack properti, jenis IReadOnlyList<Page>, yang mewakili tumpukan navigasi saat ini dalam Tab. Kelas ini juga menyediakan metode navigasi yang dapat diganti berikut:

  • GetNavigationStack, mengembalikan IReadOnlyList<Page>, tumpukan navigasi saat ini.
  • OnInsertPageBefore, yang dipanggil ketika INavigation.InsertPageBefore dipanggil.
  • OnPopAsync, mengembalikan Task<Page>, dan dipanggil ketika INavigation.PopAsync dipanggil.
  • OnPopToRootAsync, mengembalikan Task, dan dipanggil ketika INavigation.OnPopToRootAsync dipanggil.
  • OnPushAsync, mengembalikan Task, dan dipanggil ketika INavigation.PushAsync dipanggil.
  • OnRemovePage, yang dipanggil ketika INavigation.RemovePage dipanggil.

Contoh berikut menunjukkan cara mengambil alih OnRemovePage metode:

public class MyTab : Tab
{
    protected override void OnRemovePage(Page page)
    {
        base.OnRemovePage(page);

        // Custom logic
    }
}

Dalam contoh ini, MyTab objek harus digunakan dalam hierarki visual Shell Anda alih-alih Tab objek.

Kelas Shell mendefinisikan Navigating peristiwa, yang diaktifkan saat navigasi akan dilakukan, baik karena navigasi terprogram atau interaksi pengguna. Objek ShellNavigatingEventArgs yang menyertai Navigating peristiwa menyediakan properti berikut:

Properti Tipe Deskripsi
Current ShellNavigationState URI halaman saat ini.
Source ShellNavigationSource Jenis navigasi yang terjadi.
Target ShellNavigationState URI yang mewakili tempat navigasi ditujukan.
CanCancel bool Nilai yang menunjukkan apakah mungkin untuk membatalkan navigasi.
Cancelled bool Nilai yang menunjukkan apakah navigasi dibatalkan.

Selain itu, ShellNavigatingEventArgs kelas menyediakan Cancel metode yang dapat digunakan untuk membatalkan navigasi, dan GetDeferral metode yang mengembalikan ShellNavigatingDeferral token yang dapat digunakan untuk menyelesaikan navigasi. Untuk informasi selengkapnya tentang penolakan navigasi, lihat Penolakan navigasi.

Kelas Shell juga mendefinisikan Navigated peristiwa, yang diaktifkan ketika navigasi telah selesai. Objek ShellNavigatedEventArgs yang menyertai Navigated peristiwa menyediakan properti berikut:

Properti Tipe Deskripsi
Current ShellNavigationState URI halaman saat ini.
Previous ShellNavigationState URI halaman sebelumnya.
Source ShellNavigationSource Jenis navigasi yang terjadi.

Penting

Metode OnNavigating ini dipanggil ketika peristiwa terjadi Navigating . Demikian pula, OnNavigated metode ini dipanggil ketika peristiwa terjadi Navigated . Kedua metode dapat ditimpa di subkelas Anda Shell untuk mencegat permintaan navigasi.

Kelas ShellNavigatedEventArgs dan ShellNavigatingEventArgs keduanya memiliki Source properti, dari jenis ShellNavigationSource. Enumerasi ini menyediakan nilai berikut:

  • Unknown
  • Push
  • Pop
  • PopToRoot
  • Insert
  • Remove
  • ShellItemChanged
  • ShellSectionChanged
  • ShellContentChanged

Oleh karena itu, navigasi dapat dicegat dalam OnNavigating penimpaan dan tindakan dapat dilakukan berdasarkan sumber navigasi. Misalnya, kode berikut menunjukkan cara membatalkan navigasi mundur jika data di halaman tidak disimpan:

protected override void OnNavigating(ShellNavigatingEventArgs args)
{
    base.OnNavigating(args);

    // Cancel any back navigation.
    if (args.Source == ShellNavigationSource.Pop)
    {
        args.Cancel();
    }
// }

Navigasi shell dapat dicegat dan diselesaikan atau dibatalkan berdasarkan pilihan pengguna. Ini dapat dicapai dengan mengesampingkan OnNavigatingGetDeferral metode di subkelas AndaShell, dan dengan memanggil metode pada ShellNavigatingEventArgs objek. Metode ini mengembalikan ShellNavigatingDeferral token yang memiliki Complete metode, yang dapat digunakan untuk menyelesaikan permintaan navigasi:

public MyShell : Shell
{
    // ...
    protected override async void OnNavigating(ShellNavigatingEventArgs args)
    {
        base.OnNavigating(args);

        ShellNavigatingDeferral token = args.GetDeferral();

        var result = await DisplayActionSheet("Navigate?", "Cancel", "Yes", "No");
        if (result != "Yes")
        {
            args.Cancel();
        }
        token.Complete();
    }    
}

Dalam contoh ini, lembar tindakan ditampilkan yang mengundang pengguna untuk menyelesaikan permintaan navigasi, atau membatalkannya. Navigasi dibatalkan dengan memanggil Cancel metode pada ShellNavigatingEventArgs objek. Navigasi selesai dengan memanggil Complete metode pada ShellNavigatingDeferral token yang diambil oleh GetDeferral metode pada ShellNavigatingEventArgs objek.

Peringatan

Metode ini GoToAsync akan melempar InvalidOperationException jika pengguna mencoba menavigasi saat ada penundaan navigasi yang tertunda.

Meneruskan data

Data dapat diteruskan sebagai parameter kueri saat melakukan navigasi terprogram berbasis URI. Ini dicapai dengan menambahkan ? setelah rute, diikuti oleh id parameter kueri, =, dan nilai. Misalnya, kode berikut dijalankan dalam aplikasi sampel saat pengguna memilih gajah pada ElephantsPage:

async void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string elephantName = (e.CurrentSelection.FirstOrDefault() as Animal).Name;
    await Shell.Current.GoToAsync($"elephantdetails?name={elephantName}");
}

Contoh kode ini mengambil gajah yang saat ini dipilih di CollectionView, dan menavigasi ke elephantdetails rute, melewati elephantName sebagai parameter kueri.

Ada dua pendekatan untuk menerima data navigasi:

  1. Kelas yang mewakili halaman yang dinavigasi, atau kelas untuk halaman BindingContext, dapat dihiasi dengan QueryPropertyAttribute untuk setiap parameter kueri. Untuk informasi selengkapnya, lihat Memproses data navigasi menggunakan atribut properti kueri.
  2. Kelas yang mewakili halaman yang dinavigasi, atau kelas untuk halaman BindingContext, dapat mengimplementasikan IQueryAttributable antarmuka. Untuk informasi selengkapnya, lihat Memproses data navigasi menggunakan satu metode.

Memproses data navigasi menggunakan atribut properti kueri

Data navigasi dapat diterima dengan mendekorasi kelas penerima dengan QueryPropertyAttribute untuk setiap parameter kueri:

[QueryProperty(nameof(Name), "name")]
public partial class ElephantDetailPage : ContentPage
{
    public string Name
    {
        set
        {
            LoadAnimal(value);
        }
    }
    ...

    void LoadAnimal(string name)
    {
        try
        {
            Animal animal = ElephantData.Elephants.FirstOrDefault(a => a.Name == name);
            BindingContext = animal;
        }
        catch (Exception)
        {
            Console.WriteLine("Failed to load animal.");
        }
    }    
}

Argumen pertama untuk QueryPropertyAttribute menentukan nama properti yang akan menerima data, dengan argumen kedua yang menentukan id parameter kueri. Oleh karena itu, QueryPropertyAttribute dalam contoh di atas menentukan bahwa properti akan menerima data yang Name diteruskan dalam name parameter kueri dari URI dalam GoToAsync panggilan metode. Setter Name properti memanggil LoadAnimal metode untuk mengambil Animal objek untuk name, dan mengaturnya sebagai BindingContext halaman.

Catatan

Nilai parameter kueri yang diterima melalui QueryPropertyAttribute URL secara otomatis didekodekan.

Memproses data navigasi menggunakan satu metode

Data navigasi dapat diterima dengan menerapkan IQueryAttributable antarmuka pada kelas penerima. Antarmuka IQueryAttributable menentukan bahwa kelas penerapan harus menerapkan ApplyQueryAttributes metode . Metode ini memiliki query argumen, jenis IDictionary<string, string>, yang berisi data apa pun yang diteruskan selama navigasi. Setiap kunci dalam kamus adalah id parameter kueri, dengan nilainya menjadi nilai parameter kueri. Keuntungan menggunakan pendekatan ini adalah bahwa data navigasi dapat diproses menggunakan satu metode, yang dapat berguna ketika Anda memiliki beberapa item data navigasi yang memerlukan pemrosesan secara keseluruhan.

Contoh berikut menunjukkan kelas model tampilan yang mengimplementasikan IQueryAttributable antarmuka:

public class MonkeyDetailViewModel : IQueryAttributable, INotifyPropertyChanged
{
    public Animal Monkey { get; private set; }

    public void ApplyQueryAttributes(IDictionary<string, string> query)
    {
        // The query parameter requires URL decoding.
        string name = HttpUtility.UrlDecode(query["name"]);
        LoadAnimal(name);
    }

    void LoadAnimal(string name)
    {
        try
        {
            Monkey = MonkeyData.Monkeys.FirstOrDefault(a => a.Name == name);
            OnPropertyChanged("Monkey");
        }
        catch (Exception)
        {
            Console.WriteLine("Failed to load animal.");
        }
    }
    ...
}

Dalam contoh ini, ApplyQueryAttributes metode mengambil nilai name parameter kueri dari URI dalam GoToAsync panggilan metode. Kemudian, LoadAnimal metode dipanggil untuk mengambil Animal objek, di mana ditetapkan sebagai nilai Monkey properti yang terikat dengan data.

Penting

Nilai parameter kueri yang diterima melalui IQueryAttributable antarmuka tidak didekodekan URL secara otomatis.

Meneruskan dan memproses beberapa parameter kueri

Beberapa parameter kueri dapat diteruskan dengan menyambungkannya dengan &. Misalnya, kode berikut meneruskan dua item data:

async void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string elephantName = (e.CurrentSelection.FirstOrDefault() as Animal).Name;
    string elephantLocation = (e.CurrentSelection.FirstOrDefault() as Animal).Location;
    await Shell.Current.GoToAsync($"elephantdetails?name={elephantName}&location={elephantLocation}");
}

Contoh kode ini mengambil gajah yang saat ini dipilih di CollectionView, dan menavigasi ke elephantdetails rute, meneruskan elephantName dan elephantLocation sebagai parameter kueri.

Untuk menerima beberapa item data, kelas yang mewakili halaman yang dinavigasi, atau kelas untuk halaman BindingContext, dapat dihiasi dengan QueryPropertyAttribute untuk setiap parameter kueri:

[QueryProperty(nameof(Name), "name")]
[QueryProperty(nameof(Location), "location")]
public partial class ElephantDetailPage : ContentPage
{
    public string Name
    {
        set
        {
            // Custom logic
        }
    }

    public string Location
    {
        set
        {
            // Custom logic
        }
    }
    ...    
}

Dalam contoh ini, kelas dihiasi dengan QueryPropertyAttribute untuk setiap parameter kueri. Yang pertama QueryPropertyAttribute menentukan bahwa properti akan menerima data yang Name diteruskan dalam name parameter kueri, sementara yang kedua QueryPropertyAttribute menentukan bahwa properti akan menerima data yang Location diteruskan dalam location parameter kueri. Dalam kedua kasus, nilai parameter kueri ditentukan dalam URI dalam GoToAsync panggilan metode.

Atau, data navigasi dapat diproses dengan satu metode dengan menerapkan IQueryAttributable antarmuka pada kelas yang mewakili halaman yang dinavigasi, atau kelas untuk halaman BindingContext:

public class ElephantDetailViewModel : IQueryAttributable, INotifyPropertyChanged
{
    public Animal Elephant { get; private set; }

    public void ApplyQueryAttributes(IDictionary<string, string> query)
    {
        string name = HttpUtility.UrlDecode(query["name"]);
        string location = HttpUtility.UrlDecode(query["location"]);
        ...        
    }
    ...
}

Dalam contoh ini, ApplyQueryAttributes metode mengambil nilai name parameter kueri dan location dari URI dalam GoToAsync panggilan metode.

Perilaku tombol kembali

Tampilan dan perilaku tombol kembali dapat ditentukan ulang dengan mengatur BackButtonBehavior properti terlampir ke BackButtonBehavior objek. Kelas BackButtonBehavior menentukan properti berikut:

  • Command, dari jenis ICommand, yang dijalankan ketika tombol kembali ditekan.
  • CommandParameter, dari jenis object, yang merupakan parameter yang diteruskan ke Command.
  • IconOverride, dari jenis ImageSource, ikon yang digunakan untuk tombol kembali.
  • IsEnabled, dari jenis boolean, menunjukkan apakah tombol kembali diaktifkan. Nilai defaultnya adalah true.
  • TextOverride, dari jenis string, teks yang digunakan untuk tombol kembali.

Semua properti ini didukung oleh BindableProperty objek, yang berarti bahwa properti dapat menjadi target pengikatan data.

Kode berikut menunjukkan contoh menentukan ulang tampilan dan perilaku tombol kembali:

<ContentPage ...>    
    <Shell.BackButtonBehavior>
        <BackButtonBehavior Command="{Binding BackCommand}"
                            IconOverride="back.png" />   
    </Shell.BackButtonBehavior>
    ...
</ContentPage>

Kode C# yang setara adalah:

Shell.SetBackButtonBehavior(this, new BackButtonBehavior
{
    Command = new Command(() =>
    {
        ...
    }),
    IconOverride = "back.png"
});

Properti Command diatur ke yang ICommand akan dijalankan ketika tombol kembali ditekan, dan IconOverride properti diatur ke ikon yang digunakan untuk tombol kembali:

Cuplikan layar penimpaan ikon tombol kembali Shell, di iOS dan Android