Xamarin.Forms Strona karuzeli
Xamarin.Forms CarouselPage to strona, którą użytkownicy mogą przesuwać z boku do strony, aby przechodzić między stronami zawartości, takimi jak galeria. W tym artykule pokazano, jak używać strony karuzeli do nawigowania po kolekcji stron.
Ważne
Element CarouselPage
został zastąpiony przez CarouselView
element , który zapewnia układ przewijany, w którym użytkownicy mogą przesuwać palcem, aby przejść przez kolekcję elementów. Aby uzyskać więcej informacji na temat obiektu CarouselView
, zobacz Xamarin.Forms CarouselView.
Na poniższych zrzutach ekranu przedstawiono element CarouselPage
na każdej platformie:
Układ obiektu CarouselPage
jest identyczny na każdej platformie. Strony można przechodzić, przesuwając palcem od prawej do lewej, aby przechodzić do przodu przez kolekcję, a następnie przesuwając palcem od lewej do prawej, aby przejść do tyłu przez kolekcję. Na poniższych zrzutach ekranu przedstawiono pierwszą stronę w wystąpieniu CarouselPage
:
Przesuwając palcem od prawej do lewej do drugiej strony, jak pokazano na poniższych zrzutach ekranu:
Przesuwając palcem od prawej do lewej ponownie przechodzi do trzeciej strony, przesuwając palcem od lewej do prawej do poprzedniej strony.
Uwaga
Element CarouselPage
nie obsługuje wirtualizacji interfejsu użytkownika. W związku z tym wydajność może mieć wpływ, jeśli element CarouselPage
zawiera zbyt wiele elementów podrzędnych.
Jeśli obiekt CarouselPage
jest osadzony na Detail
stronie FlyoutPage
obiektu , FlyoutPage.IsGestureEnabled
właściwość powinna być ustawiona tak, aby false
zapobiec konfliktom gestów między elementem CarouselPage
i FlyoutPage
.
Aby uzyskać więcej informacji na temat , CarouselPage
zobacz rozdział 25 książki Karola Petzolda Xamarin.Forms .
Tworzenie karuzeliPage
Do utworzenia CarouselPage
elementu można użyć dwóch metod:
- Wypełnij element
CarouselPage
kolekcją wystąpień podrzędnychContentPage
. - Przypisz kolekcję do
ItemsSource
właściwości i przypisz elementDataTemplate
doItemTemplate
właściwości , aby zwrócićContentPage
wystąpienia obiektów w kolekcji.
W obu podejściach CarouselPage
zostanie wyświetlona każda strona z kolei, a interakcja szybkiego przesunięcia zostanie wyświetlona na następnej stronie.
Uwaga
Obiekt CarouselPage
można wypełnić tylko wystąpieniami ContentPage
lub ContentPage
pochodnymi.
Wypełnianie karuzeliPage kolekcją stron
Poniższy przykład kodu XAML przedstawia kod CarouselPage
, który wyświetla trzy ContentPage
wystąpienia:
<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>
Poniższy przykład kodu przedstawia równoważny interfejs użytkownika w języku 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);
}
}
Każdy ContentPage
po prostu wyświetla element Label
dla określonego koloru i tego BoxView
koloru.
Wypełnianie karuzeliPage szablonem
Poniższy przykładowy kod XAML przedstawia konstrukcję utworzoną CarouselPage
przez przypisanie elementu DataTemplate
do ItemTemplate
właściwości w celu zwrócenia stron dla obiektów w kolekcji:
<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>
Obiekt CarouselPage
jest wypełniany danymi, ustawiając ItemsSource
właściwość w konstruktorze dla pliku za pomocą kodu:
public MainPage ()
{
...
ItemsSource = ColorsDataModel.All;
}
Poniższy przykład kodu przedstawia odpowiednik CarouselPage
utworzony w języku 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;
}
}
Każdy ContentPage
po prostu wyświetla element Label
dla określonego koloru i tego BoxView
koloru.