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)
如果我可以“按原样”放置我的内容而不使用任何动态项目源,那就太好了。有任何想法吗?
您可以使用数据模板选择器来选择要显示的视图。
首先,创建包含所需内容的内容视图:
<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)