Xamarin表单自动图像幻灯片/旋转木马

时间:2014-12-02 16:39:43

标签: c# xamarin.forms

我对Xamarin Forms完全陌生,但我设法创建了一个包含多个页面的简单应用程序,并且我能够在页面之间导航。

我已经成功添加了图像,按钮和其他基本控件,看起来非常不错。

我的问题是我无法弄清楚如何在页面上创建多个图像的自动轮播。任何谷歌搜索都会返回CarouselPage,使用户可以刷屏幕以更改页面。

我正在考虑使用3张图像的水平卷轴,但它实际上没有相同的效果 - 用户必须自己移动图像!

有没有人找到这样做的方法?任何提示或提示都会很棒!

1 个答案:

答案 0 :(得分:2)

您可以将c#计时器,转盘页面和contentPage的组合编码为背景上的图像我已经做了类似的事情但是使用按钮来浏览转盘页面:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Xamarin.Forms;

namespace SEEForgeX.Views
{
class CarouselView : CarouselPage
{
    ContentPage image1,image2,image3,image4;
    public CarouselView()
    {
        NavigationPage.SetHasNavigationBar(this, false);

        string btnPrevTitle = "< Prev";
        string btnNextTitle = "Next >";
        Color btnColor = Color.FromRgba(0, 0, 0, 0.5);
        Color btnTextColor = Color.White;
        LayoutOptions btnPosY = LayoutOptions.EndAndExpand;
        LayoutOptions btnPrevPosX = LayoutOptions.StartAndExpand;
        LayoutOptions btnNextPosX = LayoutOptions.EndAndExpand;
        Font buttonFont = Font.SystemFontOfSize(16, FontAttributes.Bold);
        int btnWidth = 100;
        string exitBtnImg = "close.png";

        Button nextBtn1 = new Button
        {
            Text = btnNextTitle,
            BackgroundColor = btnColor,
            TextColor = btnTextColor,
            VerticalOptions = btnPosY,
            HorizontalOptions = btnNextPosX,
            Font = buttonFont,
            WidthRequest = btnWidth
        };

         Button prevBtn2 = new Button
            {
                Text = btnPrevTitle,
                BackgroundColor = btnColor,
                TextColor = btnTextColor,
                VerticalOptions = btnPosY,
                HorizontalOptions = btnPrevPosX,
                Font = buttonFont,
                WidthRequest = btnWidth
            };

        image1 = new ContentPage 
        {
            BackgroundImage = "slide_01.jpg",
            Content = new StackLayout 
            {
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                Orientation = StackOrientation.Vertical,
                Padding = 0,

                Children = { 
                    new StackLayout
                    {
                        Orientation = StackOrientation.Horizontal,
                        VerticalOptions = LayoutOptions.StartAndExpand,
                        Padding = new Thickness(0,10,10,0),
                        Children = { exitBtn1 }
                    },
                    new StackLayout
                    {
                        Orientation = StackOrientation.Horizontal,
                        VerticalOptions = LayoutOptions.EndAndExpand,
                        Padding = 20,
                        Children = { nextBtn1 }
                    }
                }
            },
        };

        image2 = new ContentPage
        {
            BackgroundImage = "slide_02.jpg",
            Content = new StackLayout
            {
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                Orientation = StackOrientation.Vertical,
                Padding = 0,
                Children = { 
                    new StackLayout
                    {
                        Orientation = StackOrientation.Horizontal,
                        VerticalOptions = LayoutOptions.StartAndExpand,
                        Padding = new Thickness(0,10,10,0),
                        Children = { exitBtn2 }
                    },
                    new StackLayout
                    {
                        Orientation = StackOrientation.Horizontal,
                        VerticalOptions = LayoutOptions.EndAndExpand,
                        Padding = 20,
                        Children = {prevBtn2, nextBtn2}
                    }
                }
            },

        };
//This is the children of the parent view is like adding stacklayout.children.add(foo) but since              my parent class is a CarouselPage I can access Children its children
            Children.Add(image1);
            Children.Add(image2);

    void prevBtn2_Clicked(object sender, EventArgs e)
    {
        this.CurrentPage = image1;
    }

    void nextBtn1_Clicked(object sender, EventArgs e)
    {
        this.CurrentPage = image2;
    }

    private async void exitBtn_Clicked(object sender, EventArgs e)
    {
        //await Navigation.PopModalAsync();
        await Navigation.PopModalAsync();
    }

我没有实现计时器,但它应该不难,也许你甚至可以使用循环。