轮播页面指示器

Cod*_*kie 5 c# carousel xamarin xamarin.forms

我有一个使用 Visual Studio 2013 的 Xamarin.Forms (1.4.2.6359) 项目,并创建了下面的轮播页面。我想添加页面指示器,即轮播页面顶部的点。这可以通过 Xamarin Forms CarouselPage 来完成吗?

public class SplashPage : CarouselPage
{
    public SplashPage ()
    {
        this.Children.Add(new CarouselChild("Logo.png", "Welcome"));
        this.Children.Add(new CarouselChild("Settings.png", "Settings"));
    }

}

class CarouselChild : ContentPage
{

    public CarouselChild(string image, string text)
    {
        StackLayout layout = new StackLayout
        {
            HorizontalOptions = LayoutOptions.CenterAndExpand,
            VerticalOptions = LayoutOptions.CenterAndExpand,
        };
        layout.Children.Add(new Image
        {
            Source = image,
        });
        layout.Children.Add(new Label
        {
            HorizontalOptions = LayoutOptions.CenterAndExpand,
            VerticalOptions = LayoutOptions.EndAndExpand,
            Text = text,
            Scale = 2,
        });

        this.Content = layout;
    }
}
Run Code Online (Sandbox Code Playgroud)

Cod*_*kie 0

我能够通过更改下面的 CarouselChild 方法对页面指示器进行硬编码来解决该问题:

public CarouselChild(string image, string text, int pageNumber, int pageCount)
    {
        var width = this.Width;
        StackLayout layout = new StackLayout
        {
            HorizontalOptions = LayoutOptions.FillAndExpand,
            VerticalOptions = LayoutOptions.FillAndExpand,
            Padding = new Thickness( 40, 40, 40, 40),
            BackgroundColor = Color.Black,
        };
        layout.Children.Add(new Image
        {
            Source = image,
            VerticalOptions = LayoutOptions.Start,
            HorizontalOptions = LayoutOptions.Center,
        });
        layout.Children.Add(new Label
        {
            HorizontalOptions = LayoutOptions.CenterAndExpand,
            Text = text,
            FontSize = 36,
            LineBreakMode = LineBreakMode.WordWrap,
        });
        layout.Children.Add(CarouselPageIndicator(pageNumber, pageCount));

        this.Content = layout;
    }

    internal StackLayout CarouselPageIndicator(int pageNumber, int pageCount)
    {
        StackLayout layout = new StackLayout
        {
            Orientation = StackOrientation.Horizontal,
            HorizontalOptions = LayoutOptions.CenterAndExpand,
            VerticalOptions = LayoutOptions.EndAndExpand,
        };

        if (pageCount >= pageNumber)
        {
            for (int i = 1; i < pageCount + 1; i++)
            {
                if (i == pageNumber)
                {
                    layout.Children.Add(new Image
                    {
                        Source = "Light.png",
                    });
                }
                else
                {
                    layout.Children.Add(new Image
                    {
                        Source = "Dark.png",
                    });
                }
            }
        }

        return layout;
    }
Run Code Online (Sandbox Code Playgroud)