Xamarin表单:CarouselView用于静态内容

时间:2018-02-08 10:00:14

标签: xaml xamarin.forms

我正在寻找一种方法,只为静态内容使用CarouselView for 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>

如果我可以将我的内容“原样”放在不使用任何动态项目源的情况下,那就太好了。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用data template selectors选择要显示的视图。

首先,使用所需内容创建内容视图:

<ContentView.Content>
    <StackLayout>
        <Label Text="Hello Xamarin.Forms!" />
    </StackLayout>
</ContentView.Content>

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

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;
        }
    }

然后在轮播视图中,设置数据模板选择器并将步骤绑定为项目源(模型中的步骤只是整数数组 - 例如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>

答案 1 :(得分:0)

不要使用动态的,只需在模型或页面构造函数中手动创建List,并将其设置为ItemsSource。

  1. 使用x:name="MyCarousel"

  2. 为xaml中的Carousel命名
  3. 声明您的幻灯片项目类:

    public class MyItem
    {
        public string Desc { get; set; }
        //put more stufff here
    }       
    
  4. 在后面的代码中发送你所谓的静态数据:

    var MyItems = new List<MyItem>
    {
        new MyItem
        {
            Desc = "This is step1",
        },
        new MyItem
        {
            Desc = "This is step2",
        },
        new MyItem
        {
            Desc = "This is step3",
        },
    };
    MyCarousel.ItemsSource = MyItems;