XAML in Xamarin.Forms 基礎篇 電子書

XAML in Xamarin.Forms 基礎篇 電子書
XAML in Xamarin.Forms 基礎篇 電子書

Xamarin.Forms 快速入門 電子書

Xamarin.Forms 快速入門 電子書
Xamarin.Forms 快速入門 電子書

2018/04/17

Xamarin.Forms ListView 集合資料多選

這篇文章將會探討如何在 Xamarin.Forms 中,設計原生 ListView 具有多選功能,如同下圖所示。在 Xamarin.Forms 中的 ListView 控制項,本身是沒有預設提供多選功能,僅提供單選並且可以觸發一個點選的事件,不過,若要讓 ListView 具有多選紀錄的功能,我們就需要另外設計一個 UI,當使用者選擇多筆紀錄之後,接著觸發這個 UI,就可以根據剛剛選擇完成的紀錄,進行相關的商業邏輯處理。
Xamarin.Forms ListView Multiple Select
因此,在底下的程式碼中,使用者可以點選 ListView 的不同紀錄,一旦點選之後,該紀錄就會被選取到了,並且該紀錄的背景顏色會呈現綠色,代表該紀錄已經被選取了;當然,您也可以再度點選剛剛的紀錄,這筆紀錄就會取消選取,記錄背景顏色就會恢復成為灰色。最後,若多選紀錄操作完成之後,我們可以點選導航工具列的按鈕 結束 這個按鈕,這個時候在 ViewModel 內相對應的 DelegateCommand 委派方法,就會開始計算這次使用者總共點選了幾筆紀錄,並且顯示在螢幕的上方。

本篇文章的專案原始碼位於 XFMulSelLV

建立 ListView 的頁面 View 檢視

  • 首先,請打開 MainPage.xaml 檔案,使用底下 XAML 宣告標記替換掉
  • 在這個 ListView 控制項中,其實就是一般我們在設計 ListView 所用到的 XAML 語法相同,不過,我們在 ViewCell 中,您會看到有兩個 BoxView 控制項,第一個 BoxView 控制項的顏色是灰色,而第二個 BoxView 控制項的顏色是綠色,同時,我們也看到第二個 BoxView 的 XAML 標記宣告為 <BoxView Color="LightGreen" IsVisible="{Binding IsSelected}"/> ,這表示了,這個 BoxView 是否會顯示出來,將會取決於當時這筆紀錄在 ViewModel 中的 IsSelected 屬性值是否為 True。
MainPage
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:Behaviors="clr-namespace:Prism.Behaviors;assembly=Prism.Forms"
             xmlns:prism = "clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
             prism:ViewModelLocator.AutowireViewModel= "True"
             x:Class="XFMulSelLV.Views.MainPage"
             Title="集合資料多選">

    <ContentPage.ToolbarItems>
        <ToolbarItem Text="結果"
                     Command="{Binding ShowResultCommand}"/>
    </ContentPage.ToolbarItems>

    <Grid>
        <Label Text="{Binding Title}"/>
        <ListView
            Margin="0,20,0,0"
            ItemsSource="{Binding PeopleCollection}"
            SelectedItem="{Binding PersonSelected}"
            HasUnevenRows="True"
            SeparatorVisibility="None"
            >
            <ListView.Behaviors>
                <Behaviors:EventToCommandBehavior
                    EventName="ItemTapped"
                    Command="{Binding PersonTappedCommand}"/>
            </ListView.Behaviors>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid>
                            <BoxView Color="LightGray"/>
                            <BoxView Color="LightGreen"
                                     IsVisible="{Binding IsSelected}"/>
                            <StackLayout
                                Orientation="Vertical"
                                HorizontalOptions="Fill" VerticalOptions="Start"
                                >
                                <Label
                                    Text="{Binding Name}"
                                    FontSize="30"
                                    />
                                <Label
                                    Text="{Binding Age}"
                                    FontSize="20"
                                    />
                            </StackLayout>
                        </Grid>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>

</ContentPage>

建立 ListView 的頁面 ViewModel 檢視模型

  • 首先,請打開 MainPageViewModel.cs 檔案,使用底下 C# 程式碼替換掉
  • 我們在這個檔案中,宣告了一個 ListView 的紀錄節點類別,Person,在這個類別中,有著姓名、年紀與是否選取這三個屬性。另外,為了要能夠讓您的選取動作,可以正常更新 IsSelected 屬性,進而使用當時的 IsSelected 值,更新頁面 UI 顯示,這個時候,請記得務必要將 Person 類別,要能夠實作 INotifyPropertyChanged 介面。
  • 我們設計頁面 ViewModel 的導航事件 OnNavigatedTo,在這裡進行 ListView 要顯示的記錄之初始化動作,我們在這裡產生出 100 筆的紀錄。
  • 我們有在頁面中,使用 ListView.Behaviors 來宣告一個 ListView 的事件,觸發發生後,要執行 ViewModel 中 PersonTappedCommand 命令,而我們在這個 PersonTappedCommand 命令委派方法中,執行這個敘述 PersonSelected.IsSelected = !PersonSelected.IsSelected; ,因此,若這筆紀錄尚未被選取,則 PersonSelected.IsSelected 就是 false,此時,我們將 PersonSelected.IsSelected 的值變更成為 true,因為 PersonSelected.IsSelected 值有變動了,就會觸發 INPC (Notification Property Changed) 的綁定事件,此時,頁面上就會更新 PersonSelected.IsSelected 為 true 的狀態下,將 ViewCell 內的第二個 BoxView 顯示出來。
C# CSharp
public class Person : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public string Name { get; set; }
    public int Age { get; set; }
    public bool IsSelected { get; set; }

}

public class MainPageViewModel : INotifyPropertyChanged, INavigationAware
{
    public event PropertyChangedEventHandler PropertyChanged;
    public ObservableCollection<Person> PeopleCollection { get; set; } = new ObservableCollection<Person>();
    public Person PersonSelected { get; set; }
    public string Title { get; set; } 
    public DelegateCommand PersonTappedCommand { get; set; }
    public DelegateCommand ShowResultCommand { get; set; }
    private readonly INavigationService _navigationService;

    public MainPageViewModel(INavigationService navigationService)
    {
        _navigationService = navigationService;
        PersonTappedCommand = new DelegateCommand(() =>
        {
            PersonSelected.IsSelected = !PersonSelected.IsSelected;
        });
        ShowResultCommand = new DelegateCommand(() =>
        {
            var fooCount = 0;
            foreach (var item in PeopleCollection)
            {
                if(item.IsSelected == true)
                {
                    fooCount++;
                }
            }
            Title = $"共選擇 {fooCount} 筆紀錄";
        });
    }

    public void OnNavigatedFrom(NavigationParameters parameters)
    {

    }

    public void OnNavigatingTo(NavigationParameters parameters)
    {

    }

    public void OnNavigatedTo(NavigationParameters parameters)
    {
        PeopleCollection.Clear();
        for (int i = 0; i < 100; i++)
        {
            PeopleCollection.Add(new Person
            {
                Name = $"Name{i}",
                Age = i,
                IsSelected = false
            });
        }
    }

}




2018/04/14

Xamarin 新手入門 Part 2 Xamarin.iOS 專案開發教學


Xamarin 新手入門 Part 1 Xamarin.Android 專案開發教學
Xamarin 新手入門 Part 6 我該選擇 Xamarin.Forms 或者 Xamarin 原生方式來開發跨平台應用程式專案呢?

了解更多關於 [Xamarin.Android] 的使用方式
了解更多關於 [Xamarin.iOS] 的使用方式
了解更多關於 [Xamarin.Forms] 的使用方式
了解更多關於 [Hello, Android:快速入門] 的使用方式
了解更多關於 [Hello, iOS – 快速入門] 的使用方式

了解更多關於 [Xamarin.Forms 快速入門] 的使用方式

關於 Xamarin 的新手開發者,現在我們來進行下一個階段,我這裡特別準備了一系列的新手開發練習文章,讓對於 Xamarin 有興趣的同好,可以跟著這一系列的文章,透過逐步練習,了解到 Xamarin 的好處。
現在我們來進行下一個階段,將是針對 Xamarin.iOS 的原生開發的練習,不過,在此之前,各位需要先行準備好您的 Visual Studio 2017 + Xamarin 開發環境;關於要如何準備您們的 Xamarin 開發環境,可以參考 第一次安裝 Visual Studio 2017 到新的作業系統上 或者 可以參考 Xamarin / Xamarin.Forms 行動跨平台 Mobile Cross-Platform 開發學習指引問答集 FAQ;若您還有 Xamarin 相關的問題,可以到 Xamarin.Forms @ Taiwan 與 Xamarin 同好一同進行討論。
關於使用 Xamarin 來開發 iOS 原生專案的相關基礎知識,可以參考 在 Windows 上安裝 Xamarin.iOS 文章,您將會有更深刻的認識。
您也可以查看微軟官方的 Xamarin 介紹文章 開始使用 iOS,來了解更多關於 Xamarin iOS 原生專案的開發技術與技巧。

建立一個 Xamarin iOS 專案

  • 首先,我們打開 Visual Studio 2017 (任何一種版本 Visual Studio Community 2017 / Visual Studio Professional 2017 / Visual Studio Enterprise 2017皆可)
  • 點選 Visual Studio 2017 功能表的 [檔案] > [新增] > [專案]
  • 當出現 [新增專案] 對話窗,請依序選擇 [已安裝] > [Visual C#] > [iOS] > [Univseral] [單一檢視應用程式 (iOS)]
  • 請在最下方 [名稱] 文字輸入盒欄位,輸入您想要的專案名稱
  • 最後,請點選 [確定] 按鈕
Visual Studio 2017 Xamarin iOS new project
  • 一旦 Visual Studio 的方案 ( Solution ) , 專案 ( Project ) 建立完成之後,您可以從 方案總管 ( Solution Explorer ) 中,看到整個 Xamarin Android 的專案結構。
方案總管
  • 在 Resources 目錄下,可以存放您的應用程式頁面會用到資源與檔案,在這裡,您將會看到一個 LaunchScreen.xib 檔案,另外,我們也可以看到另外一個 [Main.storyboard] 檔案,我們將會使用這個檔案來進行應用程式畫面控制項的設計,更多這方面的資訊,可以參考 Interface Builder Built-In 或者 [Storyboard](https://developer.apple.com/library/content/documentation/General/Conceptual/Devpedia-CocoaApp/Storyboard.html) 。
  • 在此之前,您先要確認您的 Windows Visual Studio 2017 已經成功與另外一台 Mac 電腦進行連線,您可以在工具列上看到一個電腦螢幕圖示,若這個圖示沒有呈現為綠色,則表示您的 Windows 電腦尚未成功與 Mac 電腦進行連線成功,這個時候,請點選這個螢幕圖示。
Pair to Mac
  • 現在,您將會看到 [Pair to Mac Instructions] 對話窗,若您對於如何在 Mac 電腦上進行相關設定,才能夠讓 Windows Visual Studio 2017 可以成功連線,可以參考這個對話窗的三個說明頁面,而且,這個設定過程相當的容易。若您已經確認 Mac 電腦端已經設定成功之後,可以關閉這個對話窗。
Pair to Mac Instructions
  • 現在,我們看到了另外一個對話窗,[Pair to Mac],若您尚未建立過任何連線,可以點選左下角的 [Add Mac] 按鈕,這個時候,會顯示出另外一個 [Add Mac] 對話窗,請在這個對話窗輸入您的 Mac 電腦 IP 位置,接著點選 [新增] 按鈕。最後,請點選右下角 [連線] 按鈕,開始進行與 Mac 電腦的連線。
Pair to Mac
  • 如同前面所提到的,若可以成功與 Mac 電腦連線,此時,工具列上的螢幕圖示,就會變成綠色的囉。
Mac 連線成功
  • 現在,請從專案中,找到 [Main.storyboard] 檔案,使用滑鼠雙擊這個檔案,稍微等候一下,您將會看到如下圖的畫面,這裡就是我們要設計頁面呈現內容的地方,在左方,有工具箱視窗,這裡有各種 iOS 原生的控制項 ,您可以使用拖拉的方式,選擇您需要的控制項,拖拉到頁面上。
Main.storyboard
  • 現在我們從工具列中,找到 [Button] 按鈕,拖拉到我們手機螢幕上。
Main.storyboard
  • 請點選剛剛拖拉上的 [Button] 按鈕,此時,從 Visual Studio 的 Property 屬性視窗,可以看到一個 Name 欄位,請在這個欄位中輸入 MyButton 。
Button Property
  • 現在,請在方案總管中,找到 ViewController.cs 節點,使用滑鼠雙擊,打開這個檔案;因為我們使用 Xamarin iOS 原生專案開發的時候,使用的是 MVC 開發框架設計模式,因此,我們要針對這個頁面所要運行的商業邏輯,就可以在這個類別中設計各種 C# 程式碼;底下,是預設產生的程式碼內容。
C# CSharp
public partial class ViewController : UIViewController
{
    public ViewController(IntPtr handle) : base(handle)
    {
    }

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();
        // Perform any additional setup after loading the view, typically from a nib.


    }

    public override void DidReceiveMemoryWarning()
    {
        base.DidReceiveMemoryWarning();
        // Release any cached data, images, etc that aren't in use.
    }
}
  • 現在,我們需要修改 ViewController 這個類別,讓這個應用程式運作起來,如同前一個 Xamarin Android 文章中執行結果是相同的。
    我們現在加入了一行事件訂閱到 ViewDidLoad 方法中,這行程式碼說明了,當按下按鈕的時候,需要變更該按鈕的顯示文字內容。
C# CSharp
public partial class ViewController : UIViewController
{
    public int count { get; set; }
    public ViewController(IntPtr handle) : base(handle)
    {
    }

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();
        // Perform any additional setup after loading the view, typically from a nib.

        MyButton.TouchUpInside += delegate { MyButton.SetTitle(string.Format("{0} clicks!", count++), UIControlState.Normal); };
    }

    public override void DidReceiveMemoryWarning()
    {
        base.DidReceiveMemoryWarning();
        // Release any cached data, images, etc that aren't in use.
    }
}

準備進行 Xamarin Android 專案的建置、執行、與除錯

  • 現在,我們要來準備進行這個 iOS 應用程式的運行,由於我們要選擇在 Mac 電腦上的模擬器來運行,因此,請在工具列上選擇 [iPhoneSimlator] 與 想要執行的 SDK 版本,最後,按下 F5 來開始執行這個專案。
iPhoneSimulator
  • 底下為在 iOS 模擬器上運行的畫面
iPhoneSimulator

進階研讀

2018/04/12

Xamarin 旋轉木馬 Carousel 控制項的使用練習教學

旋轉木馬 Carousel 控制項,這個需求是最多學員提出的問題需求,今天剛好有空,我就把如何在 Xamarin.Forms 專案中,開發出一個具有旋轉木馬效果的頁面程式,寫成這篇教學文章。

了解更多關於 [Xamarin.Android] 的使用方式
了解更多關於 [Xamarin.iOS] 的使用方式
了解更多關於 [Xamarin.Forms] 的使用方式
了解更多關於 [Hello, Android:快速入門] 的使用方式
了解更多關於 [Hello, iOS – 快速入門] 的使用方式
了解更多關於 [Xamarin.Forms 快速入門] 的使用方式
在這篇教學文章中,我們將要使用 CarouselView.FormsPlugin 這個第三方 NuGet 套件來幫助我們實踐這樣的需求,若您對於 CarouselView.FormsPlugin 這個套件想要更進一步的了解可以參考 CarouselView control for Xamarin Forms 的文件說明。

建立一個 Xamarin Forms for Prism 專案

  • 首先,我們打開 Visual Studio 2017 (任何一種版本 Visual Studio Community 2017 / Visual Studio Professional 2017 / Visual Studio Enterprise 2017皆可)
  • 點選 Visual Studio 2017 功能表的 [檔案] > [新增] > [專案]
  • 當出現 [新增專案] 對話窗,請依序選擇 [已安裝] > [Visual C#] > [Prism] > [Prism Blank App (Xamarin.Forms)]
  • 請在最下方 [名稱] 文字輸入盒欄位,輸入您想要的專案名稱
  • 最後,請點選 [確定] 按鈕
  • 現在,Visual Studio 2017 將會顯示 [PRISM PROJECT WIZARD] 這個對話窗,您可以在這個對話窗中,選擇需要跨平台的目標,在這裡,您將會有三種選擇: ANDROID, iOS, UWP,請依照您的需求,勾選需要建立的專案類型。接著,請在下方 [Container] 下拉選單中,選擇 Unity 這個選項;最後,請點選 [CREATE PROJECT] 這個按鈕,請 Prism Template Pack 所提供的樣板精靈,幫助我們產生出可用於 Prism 框架的 Xamarin.Forms 方案與專案。
PRISM PROJECT WIZARD
  • 此時,Visual Studio 2017 的 Prism Template Pack 將會開始幫您建立起四個專案(假設我們在上個步驟,勾選的所有平台目標),分別是:
    • Xamarin.Android 原生專案
    • Xamarin.iOS 原生專案
    • Windows UWP 原生專案
    • .NET Standard Class Library SCL 共用類別庫專案

CarouselView.FormsPlugin 的 NuGet 套件

  • 請滑鼠右擊 SCL 專案節點,選擇 [管理方案的 NuGet 套件]
  • 點選 瀏覽 標籤頁次,並在搜尋文字輸入盒中輸入 CarouselView.FormsPlugin
  • 當出現搜尋結果之後,請勾選所有的專案檢查盒,將這個 CarouselView.FormsPlugin NuGet 套件,安裝到 SCL 的專案中
Microsoft.EntityFrameworkCore.Sqlite

開始撰寫 應用程式的 Models

  • 滑鼠右擊 SCL 專案,選擇 [加入] > [新增資料夾]
  • 在剛剛產生的資料夾節點中,輸入 Models
  • 在剛剛產生的 Models 資料夾,使用滑鼠右擊
  • 選擇 [加入] > [類別]
  • 在 [新增項目] 對話窗,在最下方了名稱欄位中,輸入 MyItem
  • 之後,請點選 [新增] 按鈕
新增項目
  • 使用底下的程式碼,替換掉剛剛產生的檔案內容
  • 在這裡,我們定義出每個旋轉木馬要顯示項目的資料模型,其中,分別為 該項目的名稱、背景顏色、圖片 URL
C# CSharp
public class MyItem : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public string Name { get; set; }
    public Color Background { get; set; }
    public string ImageUrl { get; set; }
}
  • 現在,請在 Views 資料夾中,滑鼠雙擊 MainPage.xaml 節點,開啟這個檔案
  • 使用底下的程式碼,替換掉 MainPage.xaml 的檔案內容
  • 從底下的 XAML 內容,我們可以看到我們使用了這個命名空間 CarouselView.FormsPlugin.Abstractions 的 CarouselViewControl 控制項,用來顯示在該頁面上,做為要顯示旋轉木馬的地方。
  • 由於旋轉木馬顯示需求,是要能夠將一群集合資料,可以採用類似旋轉木馬的效果,顯示出來,因此,我們需要定義出 ItemsSource 這個控制項屬性,將其綁定到該頁面的 檢視模型 ViewModel 上。
  • 若想要知道使用者當時轉動到哪個項目了,我們需要使用 Prism 提供的 行為 Behavior 擴充功能,使用 EventToCommandBehavior 這個行為,設定當 PositionSelected 這個事件被觸發的時候,需要執行 ViewModel 中的 MyPositionSelectedCommand 命令委派方法。
  • 在這個 MyPositionSelectedCommand 命令中,我們會到過該選轉木馬控制項的 Position 屬性,綁定到 ViewModel 中的 MyPosition C# 屬性,透過這個 MyPosition C# Property 屬性,我們就可以知道,這個時候,使用者選轉到哪個集合紀錄上。
  • 我們可以透過 CarouselViewControl.ItemTemplate 這個屬性,進行宣告這個旋轉木馬要出現的樣貌,您可以透過底下 XAML 中的 這個標記區段的 XAML 內容,進行宣告每筆紀錄要出現樣貌,當然,善用資料綁定 (Data Binding) 或者數值轉換器 (Value Converter),就可以做到每筆紀錄,根據當成 ViewModel 中實際資料內容,進而控制頁面顯示出不同的效果。
XAML
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:cv="clr-namespace:CarouselView.FormsPlugin.Abstractions;assembly=CarouselView.FormsPlugin.Abstractions"
             xmlns:behaviors="clr-namespace:Prism.Behaviors;assembly=Prism.Forms"
             x:Class="XFCarousel.Views.MainPage"
             Title="旋轉木馬控制項使用範例">

    <Grid
        >
        <cv:CarouselViewControl
            WidthRequest="300" HeightRequest="400"
            HorizontalOptions="Center" VerticalOptions="Center"
            ItemsSource="{Binding MyItemsSource}"
            ShowArrows="true"
            ShowIndicators="true"
            Position="{Binding MyPosition}"
            Orientation="Horizontal"
            >
            <cv:CarouselViewControl.Behaviors>
                <behaviors:EventToCommandBehavior
                    EventName="PositionSelected"
                    Command="{Binding MyPositionSelectedCommand}"/>
            </cv:CarouselViewControl.Behaviors>
            <cv:CarouselViewControl.ItemTemplate>
                <DataTemplate>
                    <Grid
                        >
                        <BoxView                            
                            Color="{Binding Background}"/>
                        <Label
                            HorizontalOptions="Center" VerticalOptions="Start"
                            Text="{Binding Name}"/>
                        <Image
                            HorizontalOptions="Center" VerticalOptions="Center"
                            WidthRequest="200" HeightRequest="300"
                            Aspect="AspectFit"
                            Source="{Binding ImageUrl}"/>
                    </Grid>
                </DataTemplate>
            </cv:CarouselViewControl.ItemTemplate>
        </cv:CarouselViewControl>

        <Label
            HorizontalOptions="Center" VerticalOptions="End"
            FontSize="30"
            Text="{Binding Hint}"/>
    </Grid>

</ContentPage>
  • 請在 ViewModels 資料夾中,找到 MainPageViewModel 檔案,使用滑鼠雙擊這個檔案,打開他
  • 使用底下的程式碼,替換掉這個檔案內容
C# CSharp
public class MainPageViewModel : INotifyPropertyChanged, INavigationAware
{
    public event PropertyChangedEventHandler PropertyChanged;
    public ObservableCollection<MyItem> MyItemsSource { get; set; } = new ObservableCollection<MyItem>();
    public int MyPosition { get; set; }
    public string Hint { get; set; }
    private readonly INavigationService _navigationService;
    public DelegateCommand MyPositionSelectedCommand { get; set; }

    public MainPageViewModel(INavigationService navigationService)
    {
        _navigationService = navigationService;

        MyPositionSelectedCommand = new DelegateCommand(() =>
        {
            Hint = $"您點選了 {MyItemsSource[MyPosition].Name}";
        });
    }

    public void OnNavigatedFrom(NavigationParameters parameters)
    {

    }

    public void OnNavigatingTo(NavigationParameters parameters)
    {

    }

    public void OnNavigatedTo(NavigationParameters parameters)
    {
        MyItemsSource.Clear();

        MyItemsSource.Add(new MyItem()
        {
            Name = "LightBlue",
            Background = Color.LightBlue,
            ImageUrl = "https://avatars2.githubusercontent.com/u/790012?s=200&v=4",
        });
        MyItemsSource.Add(new MyItem()
        {
            Name = "LightCoral",
            Background = Color.LightCoral,
            ImageUrl = "http://icons.iconarchive.com/icons/graphicloads/100-flat/256/home-icon.png",
        });
        MyItemsSource.Add(new MyItem()
        {
            Name = "LightCyan",
            Background = Color.LightCyan,
            ImageUrl = "http://icons.iconarchive.com/icons/graphicloads/100-flat-2/256/mobile-2-icon.png",
        });
        MyItemsSource.Add(new MyItem()
        {
            Name = "LightGoldenrodYellow",
            Background = Color.LightGoldenrodYellow,
            ImageUrl = "http://files.softicons.com/download/game-icons/super-mario-icons-by-sandro-pereira/png/256/Mushroom%20-%20Super.png",
        });
        MyItemsSource.Add(new MyItem()
        {
            Name = "LightGreen",
            Background = Color.LightGreen,
            ImageUrl = "http://images.all-free-download.com/images/graphiclarge/harry_potter_icon_6825007.jpg",
        });
        MyItemsSource.Add(new MyItem()
        {
            Name = "LightSlateGray",
            Background = Color.LightSlateGray,
            ImageUrl = "http://www.icosky.com/icon/png/Movie%20%26%20TV/Doraemon/smile.png",
        });
        MyItemsSource.Add(new MyItem()
        {
            Name = "LimeGreen",
            Background = Color.LimeGreen,
            ImageUrl = "http://images.pocketgamer.co.uk/artwork/imgthumbs/na-owuz/10_mario_facts11.jpg",
        });
        MyItemsSource.Add(new MyItem()
        {
            Name = "LightSalmon",
            Background = Color.LightSalmon,
            ImageUrl = "https://rocketdock.com/images/screenshots/thumbnails/Awesome_small.png",
        });
        MyItemsSource.Add(new MyItem()
        {
            Name = "LightGray",
            Background = Color.LightGray,
            ImageUrl = "http://wikiclipart.com/wp-content/uploads/2018/01/Pig-face-cute-face-finance-happy-hog-pig-piggy-icon-icon-search-engine-clip-art.png",
        });
    }

}

執行與測試

  • 設定 Android 專案為預設起始專案
  • 請重建 Android 原生專案
  • 若沒有問題,請執行這個 Android 專案
  • 您可以使用手勢操作,在旋轉木馬控制項上,左右滑動,就可以看到不同的紀錄內容,或者,可以使用 < 或者 > 這兩個標記,點選他們,也可以進行左右的滑動
  • 當您切換到一個新的紀錄,您將會看到在螢幕的最下方,會看到這個紀錄的名稱
旋轉木馬 旋轉木馬 旋轉木馬 旋轉木馬