XAML in Xamarin.Forms 基礎篇 電子書

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

Xamarin.Forms 快速入門 電子書

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

2016/08/14

Xamarin.Forms OnPlatform 的不同用法 XAML & C#

OnPlatform 的不同用法 XAML & C#

這篇筆記的專案原始碼,會存放在這裡 OnPlatform 的不同用法 XAML & C# 原始碼

XAML 內的用法

若您想要在 XAML 標記裡面,針對不同平台,宣告不同的屬性值,可以使用 <OnPlatform 項目來宣告。
在底下的範例中,首先針對 <ContentPage.Padding> 屬性定義其上下左右的內縮值,這裡使用了<OnPlatform x:TypeArguments="Thickness"> 宣告了這裡的值將會提供 Thinckness 類型的值,並且針對了OnPlatform.iOS / OnPlatform.Android / OnPlatform.WinPhone 這三個平台,分別定義了 Padding 內容。這個範例是個非常經典的應用,那就是當您在使用 ContentPage 的時候,僅只有在 iOS 平台,您需要往下內縮 20 dp,否則,這個 ContentPage 將會蓋掉最上面的狀態列。這裡的用法使用的屬性項目 (Property Element)方式來表示。
您也可轉換使用屬性 (Attribute) 的方式來宣告不同平台下的值。在底下的 BoxView.Color 範例中,使用了<OnPlatform x:TypeArguments="Color" 來定義這個項目的顏色,不過,這裡使用了屬性方式分別定義了不同平台的顏色值。
<?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:local="clr-namespace:XFOnPlatform"
             x:Class="XFOnPlatform.MainPage">

  <ContentPage.Padding>
    <OnPlatform x:TypeArguments="Thickness">
      <OnPlatform.iOS>
        0, 20, 0, 0
      </OnPlatform.iOS>
      <OnPlatform.Android>
        0, 0, 0, 0
      </OnPlatform.Android>
      <OnPlatform.WinPhone>
        0, 0, 0, 0
      </OnPlatform.WinPhone>
    </OnPlatform>
  </ContentPage.Padding>

  <StackLayout
     Orientation="Vertical">
    <BoxView HorizontalOptions="Center">
      <BoxView.Color>
        <OnPlatform x:TypeArguments="Color"
          iOS="Green"
          Android="#738182"
          WinPhone="Accent" />
      </BoxView.Color>

      <BoxView.WidthRequest>
        <OnPlatform x:TypeArguments="x:Double"
          iOS="330"
          Android="240"
          WinPhone="150" />
      </BoxView.WidthRequest>
      <BoxView.HeightRequest>300</BoxView.HeightRequest>     
    </BoxView>

    <Label
      x:Name="lblMessage"
      Margin="0,40,0,0"
      HorizontalOptions="Center"
      FontSize="30"
      TextColor="Red"/>
  </StackLayout>
</ContentPage>

C# 內的用法

當您想要在 C# 內,根據不同作業系統,進行不同的商業邏輯處理,您可以使用 Device.OnPlatform 來定義不同平台需要執行的程式碼; 從 Device.OnPlatform 方法定義簽章中,可以看到
public static Void OnPlatform (Action iOS, Action Android, Action WinPhone, Action Default)
這表示了,您可以分別針對不同的平台,委派不同的方法並且執行這些程式碼,使用方式相當的簡單,可以參考底下程式碼。
        public MainPage()
        {
            InitializeComponent();

            Device.OnPlatform(
                    Android: () =>
                    {
                        lblMessage.Text = "我在 Android 系統下";
                    },
                    iOS: () =>
                    {
                        lblMessage.Text = "我在 iOS 系統下";
                    },
                    WinPhone: () =>
                    {
                        lblMessage.Text = "我在 Windows 系統下";
                    });
        }

沒有留言:

張貼留言