Xamarin.Forms 應用程式類別
Application
基底類別提供下列功能,它們公開於您專案的預設 App
子類別:
MainPage
屬性,這是要設定應用程式起始頁的位置。- 持續性的
Properties
字典,用來跨生命週期狀態變更來儲存簡單值。 - 靜態的
Current
屬性,其中包含目前應用程式物件的參考。
它也會公開生命週期方法,例如 OnStart
、OnSleep
和 OnResume
,以及強制回應巡覽事件。
根據您選擇的範本,App
類別可以用兩種方式之一來定義:
- C# 或
- XAML & C#
若要使用 XAML 建立 App 類別,預設的 App 類別必須取代為 XAML App 類別和相關聯的程式碼後置,如下列程式碼範例所示:
<Application xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Photos.App">
</Application>
下列程式碼範例顯示相關聯的 程式碼後置:
public partial class App : Application
{
public App ()
{
InitializeComponent ();
MainPage = new HomePage ();
}
...
}
除了設定 MainPage
屬性之外,程式碼後置還必須呼叫 InitializeComponent
方法來載入及剖析相關聯的 XAML。
MainPage 屬性
Application
類別的 MainPage
屬性會設定應用程式的根頁面。
比方說,您可以在 App
類別中建立邏輯,以視使用者登入與否顯示不同的頁面。
MainPage
屬性應該設定於 App
建構函式中,
public class App : Xamarin.Forms.Application
{
public App ()
{
MainPage = new ContentPage { Title = "App Lifecycle Sample" }; // your page here
}
}
Properties 字典
Application
子類別有靜態的 Properties
字典可以用來儲存資料,特別是用於 OnStart
、OnSleep
和 OnResume
方法。 您可以使用 從程式 Xamarin.Forms 代碼中的任何位置存取此專案 Application.Current.Properties
。
Properties
字典使用 string
索引鍵並儲存 object
值。
例如,您可以在程式碼中的任何位置設定持續性的 "id"
屬性 (項目選取時,在頁面的 OnDisappearing
方法,或在 OnSleep
方法中) 如下所示:
Application.Current.Properties ["id"] = someClass.ID;
在 OnStart
或 OnResume
方法中,您便可以使用此值,以某種方式重新建立使用者的體驗。 Properties
字典會儲存 object
,因此您需要先轉換其值才能使用。
if (Application.Current.Properties.ContainsKey("id"))
{
var id = Application.Current.Properties ["id"] as int;
// do something with id
}
請務必先檢查索引鍵是否存在才存取它,以避免發生意外的錯誤。
注意
Properties
字典只可序列化基本類型以便儲存。 嘗試儲存其他類型 (例如 List<string>
) 可能會以無訊息模式失敗。
持續性
Properties
字典會自動儲存至裝置。
新增至字典的資料將在應用程式從背景返回時可用,或甚至在它重新啟動之後才可使用。
Xamarin.Forms 1.4 在 類別上 Application
引進了額外的方法 - SavePropertiesAsync()
可呼叫以主動保存 Properties
字典。 這樣可讓您在重要更新之後儲存屬性,而不必冒著它們因為損毀或被 OS 終止 OS 而未序列化的風險。
您可以在建立行動應用程式與Xamarin.Forms書籍中找到使用Properties
字典的參考(請參閱章節 6、15 和 20),以及相關聯的範例。
應用程式類別
完整的 Application
類別實作顯示如下供您參考:
public class App : Xamarin.Forms.Application
{
public App ()
{
MainPage = new ContentPage { Title = "App Lifecycle Sample" }; // your page here
}
protected override void OnStart()
{
// Handle when your app starts
Debug.WriteLine ("OnStart");
}
protected override void OnSleep()
{
// Handle when your app sleeps
Debug.WriteLine ("OnSleep");
}
protected override void OnResume()
{
// Handle when your app resumes
Debug.WriteLine ("OnResume");
}
}
這個類別接著便會在每個平台特定專案中具現化,並傳遞至 LoadApplication
方法,在這裡會載入 MainPage
並顯示給使用者。
每個平台的程式碼顯示在下列各節。 最新的 Xamarin.Forms 解決方案範本已經包含所有此程式碼,已針對您的應用程式預先設定。
iOS 專案
iOS AppDelegate
類別繼承自 FormsApplicationDelegate
。 它應該:
使用
App
類別的執行個體呼叫LoadApplication
。一律傳回
base.FinishedLaunching (app, options);
。
[Register ("AppDelegate")]
public partial class AppDelegate :
global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate // superclass new in 1.3
{
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
global::Xamarin.Forms.Forms.Init ();
LoadApplication (new App ()); // method is new in 1.3
return base.FinishedLaunching (app, options);
}
}
Android 專案
Android MainActivity
繼承自 FormsAppCompatActivity
。 在 OnCreate
覆寫中,使用 App
類別的執行個體呼叫 LoadApplication
方法。
[Activity (Label = "App Lifecycle Sample", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = true,
ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : FormsAppCompatActivity
{
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
global::Xamarin.Forms.Forms.Init (this, bundle);
LoadApplication (new App ()); // method is new in 1.3
}
}
適用於 Windows 10 的通用 Windows 平台 (UWP)
在 UWP 專案中的主頁面應該繼承自 WindowsPage
:
<forms:WindowsPage
...
xmlns:forms="using:Xamarin.Forms.Platform.UWP"
...>
</forms:WindowsPage>
建構背後的 C# 程式代碼必須呼叫 LoadApplication
,才能建立 的 Xamarin.FormsApp
實例。 請注意,最好明確地使用應用程式命名空間來限定 ,App
因為 UWP 應用程式也有與其無關Xamarin.Forms的類別App
。
public sealed partial class MainPage
{
public MainPage()
{
InitializeComponent();
LoadApplication(new YOUR_NAMESPACE.App());
}
}
請注意,必須從 UWP 專案中的 App.xaml.cs 呼叫 Forms.Init()
。
如需詳細資訊,請參閱 設定 Windows 專案,其中包含將 UWP 專案新增至未以 UWP 為目標的現有 Xamarin.Forms 解決方案的步驟。