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:
BackButtonBehavior
, jenisBackButtonBehavior
, properti terlampir yang menentukan perilaku tombol kembali.CurrentItem
, jenisShellItem
, item yang saat ini dipilih.CurrentPage
, jenisPage
, halaman yang saat ini dipilih.CurrentState
, jenisShellNavigationState
, status navigasi saat ini dariShell
.Current
, tipeShell
, alias yang dikonversikan untukApplication.Current.MainPage
.
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 FlyoutItem
objek , , TabBar
Tab
, 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.MainPage
Shell
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:
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.
Tumpukan navigasi
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
, mengembalikanIReadOnlyList<Page>
, tumpukan navigasi saat ini.OnInsertPageBefore
, yang dipanggil ketikaINavigation.InsertPageBefore
dipanggil.OnPopAsync
, mengembalikanTask<Page>
, dan dipanggil ketikaINavigation.PopAsync
dipanggil.OnPopToRootAsync
, mengembalikanTask
, dan dipanggil ketikaINavigation.OnPopToRootAsync
dipanggil.OnPushAsync
, mengembalikanTask
, dan dipanggil ketikaINavigation.PushAsync
dipanggil.OnRemovePage
, yang dipanggil ketikaINavigation.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.
Peristiwa navigasi
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();
}
// }
Penangguh navigasi
Navigasi shell dapat dicegat dan diselesaikan atau dibatalkan berdasarkan pilihan pengguna. Ini dapat dicapai dengan mengesampingkan OnNavigating
GetDeferral
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:
- Kelas yang mewakili halaman yang dinavigasi, atau kelas untuk halaman
BindingContext
, dapat dihiasi denganQueryPropertyAttribute
untuk setiap parameter kueri. Untuk informasi selengkapnya, lihat Memproses data navigasi menggunakan atribut properti kueri. - Kelas yang mewakili halaman yang dinavigasi, atau kelas untuk halaman
BindingContext
, dapat mengimplementasikanIQueryAttributable
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 jenisICommand
, yang dijalankan ketika tombol kembali ditekan.CommandParameter
, dari jenisobject
, yang merupakan parameter yang diteruskan keCommand
.IconOverride
, dari jenisImageSource
, ikon yang digunakan untuk tombol kembali.IsEnabled
, dari jenisboolean
, menunjukkan apakah tombol kembali diaktifkan. Nilai defaultnya adalahtrue
.TextOverride
, dari jenisstring
, 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: