Xamarin 表单:静态内容的 CarouselView

Igo*_* P. 6 xaml xamarin.forms

我正在寻找一种将 CarouselView 用于仅包含静态内容的 Xamarin 表单的方法。这意味着,我不打算使用任何 Itemsource 或绑定或其他任何东西。

让我们假设我有三个独立的 Stacklayouts(每个都包含几个文本标签和按钮)并且我希望能够水平滑动它们。像这样(伪代码):

<cv:CarouselView>
   <cv:CarouselView.Items>
      <CarouselItem>
         <StackLayout>
            <Label Text="This is step1" />
         </StackLayout>
      </CarouselItem >
      <CarouselItem>
         <StackLayout>
            <Label Text="This is step2" />
         </StackLayout>
      </CarouselItem >
      <CarouselItem>
         <StackLayout>
            <Label Text="This is step3" />
         </StackLayout>
      </CarouselItem >
   </cv:CarouselView.Items>
</cv:CarouselView>
Run Code Online (Sandbox Code Playgroud)

如果我可以“按原样”放置我的内容而不使用任何动态项目源,那就太好了。有任何想法吗?

Ogn*_*bic 4

您可以使用数据模板选择器来选择要显示的视图。

首先,创建包含所需内容的内容视图:

<ContentView.Content>
    <StackLayout>
        <Label Text="Hello Xamarin.Forms!" />
    </StackLayout>
</ContentView.Content>
Run Code Online (Sandbox Code Playgroud)

然后创建一个数据模板选择器并在其中决定应调用哪个模板:

public DataTemplate Step1 { get; set; }
    public DataTemplate Step2 { get; set; }
    public DataTemplate Step3 { get; set; }

    public HelpPageDataTemplateSelector()
    {
        Step1 = new DataTemplate(typeof(ContentViewStep1));
        Step2 = new DataTemplate(typeof(ContentViewStep2));
        Step3 = new DataTemplate(typeof(ContentViewStep3));
    }

    protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
    {
        switch ((int)item)
        {
            case 2: return Step2;
            case 3: return Step3;
            default: return Step1;
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后在轮播视图中,设置数据模板选择器并将步骤绑定为项目源(模型中的步骤只是整数数组 - 例如 1,2,3):

<ContentPage.Resources>
    <ResourceDictionary>
        <Selector:TemplateSelector x:Key="TemplateSelector"></Selector:HelpPageDataTemplateSelector>
    </ResourceDictionary>
</ContentPage.Resources>

<ContentPage.Content>
    <Forms:CarouselView ItemTemplate="{StaticResource TemplateSelector}" ItemsSource="{Binding Steps}" />
</ContentPage.Content>
Run Code Online (Sandbox Code Playgroud)