Xamarin.Forms Halaman Carousel
CarouselPage Xamarin.Forms adalah halaman yang dapat disapu pengguna dari sisi ke sisi untuk menavigasi halaman konten, seperti galeri. Artikel ini menunjukkan cara menggunakan CarouselPage untuk menavigasi kumpulan halaman.
Penting
CarouselPage
telah digantikan oleh CarouselView
, yang menyediakan tata letak yang dapat digulir di mana pengguna dapat menggesek untuk berpindah melalui kumpulan item. Untuk informasi selengkapnya tentang CarouselView
, lihat Xamarin.Forms CarouselView.
Cuplikan layar berikut menunjukkan CarouselPage
di setiap platform:
Tata letak identik CarouselPage
pada setiap platform. Halaman dapat dinavigasi dengan menggesekkan kanan ke kiri untuk menavigasi maju melalui koleksi, dan dengan menggesekkan ke kiri ke kanan untuk menavigasi mundur melalui koleksi. Cuplikan layar berikut menunjukkan halaman pertama dalam CarouselPage
instans:
Menggesek dari kanan ke kiri berpindah ke halaman kedua, seperti yang diperlihatkan dalam cuplikan layar berikut:
Menggesek dari kanan ke kiri lagi berpindah ke halaman ketiga, sambil menggesek dari kiri ke kanan kembali ke halaman sebelumnya.
Catatan
CarouselPage
tidak mendukung virtualisasi UI. Oleh karena itu, performa dapat terpengaruh jika CarouselPage
mengandung terlalu banyak elemen anak.
CarouselPage
Jika disematkan ke Detail
halaman FlyoutPage
, FlyoutPage.IsGestureEnabled
properti harus diatur ke false
untuk mencegah konflik gerakan antara CarouselPage
dan FlyoutPage
.
Untuk informasi selengkapnya tentang CarouselPage
, lihat Bab 25 dari buku Charles Petzold Xamarin.Forms .
Membuat CarouselPage
Dua pendekatan dapat digunakan untuk membuat CarouselPage
:
- Isi
CarouselPage
dengan kumpulan instans anakContentPage
. - Tetapkan koleksi ke
ItemsSource
properti dan tetapkanDataTemplate
keItemTemplate
properti untuk mengembalikanContentPage
instans untuk objek dalam koleksi.
Dengan kedua pendekatan, CarouselPage
kemudian akan menampilkan setiap halaman secara bergantian, dengan interaksi gesek berpindah ke halaman berikutnya untuk ditampilkan.
Catatan
Hanya CarouselPage
dapat diisi dengan ContentPage
instans, atau ContentPage
turunan.
Mengisi CarouselPage dengan koleksi Halaman
Contoh kode XAML berikut menunjukkan CarouselPage
yang menampilkan tiga ContentPage
instans:
<CarouselPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="CarouselPageNavigation.MainPage">
<ContentPage>
<ContentPage.Padding>
<OnPlatform x:TypeArguments="Thickness">
<On Platform="iOS, Android" Value="0,40,0,0" />
</OnPlatform>
</ContentPage.Padding>
<StackLayout>
<Label Text="Red" FontSize="Medium" HorizontalOptions="Center" />
<BoxView Color="Red" WidthRequest="200" HeightRequest="200" HorizontalOptions="Center" VerticalOptions="CenterAndExpand" />
</StackLayout>
</ContentPage>
<ContentPage>
...
</ContentPage>
<ContentPage>
...
</ContentPage>
</CarouselPage>
Contoh kode berikut menunjukkan UI yang setara di C#:
public class MainPageCS : CarouselPage
{
public MainPageCS ()
{
Thickness padding;
switch (Device.RuntimePlatform)
{
case Device.iOS:
case Device.Android:
padding = new Thickness(0, 40, 0, 0);
break;
default:
padding = new Thickness();
break;
}
var redContentPage = new ContentPage {
Padding = padding,
Content = new StackLayout {
Children = {
new Label {
Text = "Red",
FontSize = Device.GetNamedSize (NamedSize.Medium, typeof(Label)),
HorizontalOptions = LayoutOptions.Center
},
new BoxView {
Color = Color.Red,
WidthRequest = 200,
HeightRequest = 200,
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.CenterAndExpand
}
}
}
};
var greenContentPage = new ContentPage {
Padding = padding,
Content = new StackLayout {
...
}
};
var blueContentPage = new ContentPage {
Padding = padding,
Content = new StackLayout {
...
}
};
Children.Add (redContentPage);
Children.Add (greenContentPage);
Children.Add (blueContentPage);
}
}
Masing-masing ContentPage
hanya menampilkan Label
untuk warna tertentu dan BoxView
warna tersebut.
Mengisi CarouselPage dengan templat
Contoh kode XAML berikut menunjukkan yang CarouselPage
dibangun dengan menetapkan DataTemplate
ke ItemTemplate
properti untuk mengembalikan halaman untuk objek dalam koleksi:
<CarouselPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="CarouselPageNavigation.MainPage">
<CarouselPage.ItemTemplate>
<DataTemplate>
<ContentPage>
<ContentPage.Padding>
<OnPlatform x:TypeArguments="Thickness">
<On Platform="iOS, Android" Value="0,40,0,0" />
</OnPlatform>
</ContentPage.Padding>
<StackLayout>
<Label Text="{Binding Name}" FontSize="Medium" HorizontalOptions="Center" />
<BoxView Color="{Binding Color}" WidthRequest="200" HeightRequest="200" HorizontalOptions="Center" VerticalOptions="CenterAndExpand" />
</StackLayout>
</ContentPage>
</DataTemplate>
</CarouselPage.ItemTemplate>
</CarouselPage>
diisi CarouselPage
dengan data dengan mengatur ItemsSource
properti di konstruktor untuk file code-behind:
public MainPage ()
{
...
ItemsSource = ColorsDataModel.All;
}
Contoh kode berikut menunjukkan setara CarouselPage
yang dibuat di C#:
public class MainPageCS : CarouselPage
{
public MainPageCS ()
{
Thickness padding;
switch (Device.RuntimePlatform)
{
case Device.iOS:
case Device.Android:
padding = new Thickness(0, 40, 0, 0);
break;
default:
padding = new Thickness();
break;
}
ItemTemplate = new DataTemplate (() => {
var nameLabel = new Label {
FontSize = Device.GetNamedSize (NamedSize.Medium, typeof(Label)),
HorizontalOptions = LayoutOptions.Center
};
nameLabel.SetBinding (Label.TextProperty, "Name");
var colorBoxView = new BoxView {
WidthRequest = 200,
HeightRequest = 200,
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.CenterAndExpand
};
colorBoxView.SetBinding (BoxView.ColorProperty, "Color");
return new ContentPage {
Padding = padding,
Content = new StackLayout {
Children = {
nameLabel,
colorBoxView
}
}
};
});
ItemsSource = ColorsDataModel.All;
}
}
Masing-masing ContentPage
hanya menampilkan Label
untuk warna tertentu dan BoxView
warna tersebut.