Xamarin.Forms Uygulama sınıfı
ApplicationTemel sınıf, projelerinizin varsayılan alt sınıfında sunulan aşağıdaki özellikleri sunar App :
MainPageUygulamanın ilk sayfasının ayarlandığı bir özellik.- Yaşam döngüsü durum değişikliklerinde basit değerleri depolamaya yönelik kalıcı bir Sözlük .
CurrentGeçerli uygulama nesnesine bir başvuru içeren statik özellik.
Ayrıca,, ve gibi yaşam döngüsü yöntemleriniOnSleep ve OnResume kalıcı gezinti olaylarını da kullanıma sunar.
Seçtiğiniz şablona bağlı olarak, App sınıfı iki şekilde tanımlanabilir:
- C#veya
- XAML C #
XAML kullanarak bir uygulama sınıfı oluşturmak için, varsayılan uygulama sınıfı, aşağıdaki kod ÖRNEĞINDE gösterildiği gibi bir xaml uygulama sınıfıyla ve ilişkili kod arkasında değiştirilmelidir:
<Application xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Photos.App">
</Application>
Aşağıdaki kod örneği, arka planda ilişkili kodu gösterir:
public partial class App : Application
{
public App ()
{
InitializeComponent ();
MainPage = new HomePage ();
}
...
}
Xamarin_Forms _Application_MainPage "Data-LinkType =" Absolute-path ">MainPage özelliğini ayarlayarak, arka plan kodu, InitializeComponent ilişkili xaml 'yi yüklemek ve ayrıştırmak için yöntemini de çağırmalıdır.
MainPage özelliği
MainPageApplication Sınıfındaki özelliği uygulamanın kök sayfasını ayarlar.
Örneğin, App Kullanıcı oturum açmış olmasına bağlı olarak farklı bir sayfa göstermek için sınıfınızdaki mantığı oluşturabilirsiniz.
MainPageÖzelliği App oluşturucuda ayarlanmalıdır,
public class App : Xamarin.Forms.Application
{
public App ()
{
MainPage = new ContentPage { Title = "App Lifecycle Sample" }; // your page here
}
}
Özellik sözlüğü
ApplicationAlt sınıfta PropertiesOnStart ,, OnSleep ve yöntemlerinde kullanılmak üzere verileri depolamak için kullanılabilen bir statik sözlük bulunur OnResume . Bu, kodunuzun herhangi bir yerinden kullanılarak erişilebilir Xamarin.FormsApplication.Current.Properties .
PropertiesSözlük bir anahtar kullanır string ve bir değer depolar object .
Örneğin, "id" kodunuzda herhangi bir yerde (bir öğe seçildiğinde, sayfanın OnDisappearing yönteminde veya yönteminde) kalıcı bir özellik ayarlayabilirsiniz OnSleep :
Application.Current.Properties ["id"] = someClass.ID;
OnStartVeya yöntemlerinde, OnResume Bu değeri kullanarak kullanıcının deneyimini bir şekilde yeniden oluşturabilirsiniz. PropertiesSözlük, object Bu öğeleri kullanmadan önce değerini atamalısınız.
if (Application.Current.Properties.ContainsKey("id"))
{
var id = Application.Current.Properties ["id"] as int;
// do something with id
}
Beklenmeyen hataları engellemek için, erişmeden önce anahtarın varlığını her zaman denetleyin.
Not
Properties sözlüğü yalnızca ilkel türleri depolama için seri hale getirebilir. Diğer türleri (örneğin,) depolamaya çalışılması List<string> sessizce başarısız olabilir.
Kalıcılığı
PropertiesSözlük cihaza otomatik olarak kaydedilir.
Sözlüğe eklenen veriler, uygulama arka plandan geri döndüğünde veya yeniden başlatıldıktan sonra bile kullanılabilir.
Xamarin.Forms 1,4, Application Bu sınıf üzerinde SavePropertiesAsync() , sözlüğü önceden kalıcı hale getirmek için çağrılabilecek bir ek yöntem sunmuştur Properties . Bu, bir kilitlenme nedeniyle veya işletim sistemi tarafından sonlandırılmadığından, önemli güncelleştirmelerden sonra özellikleri kaydetmenizi sağlar.
PropertiesSözlüğü Properties bölümünde, kitap bölüm Xamarin.Forms, 15ve 20ve ilişkili örneklerdesözlük kullanma başvurularını bulabilirsiniz.
Uygulama Sınıfı
ApplicationAşağıdaki başvuru için bir sınıf uygulamasının tamamı aşağıda gösterilmektedir:
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");
}
}
Bu sınıf daha sonra platforma özgü her bir projede oluşturulur ve LoadApplication , MainPage ' nin yüklendiği ve kullanıcıya görüntülendiği yönteme geçirilir.
Her platformun kodu aşağıdaki bölümlerde gösterilmiştir. En son Xamarin.Forms Çözüm şablonları, uygulamanız için önceden yapılandırılmış olan tüm bu kodu zaten içeriyor.
iOS projesi
İOS AppDelegate sınıfı öğesinden devralır FormsApplicationDelegate . Şunları yapmanız gerekir:
LoadApplicationSınıfının bir örneğiyle çağırınApp.Her zaman dön
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 projesi
Android MainActivity öğesinden devralır FormsAppCompatActivity . Override içinde OnCreate , LoadApplication yöntemi sınıfının bir örneğiyle çağrılır App .
[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 için evrensel Windows projesi (UWP)
UWP projesindeki ana sayfa, öğesinden devralması gereken WindowsPage :
<forms:WindowsPage
...
xmlns:forms="using:Xamarin.Forms.Platform.UWP"
...>
</forms:WindowsPage>
Oluşturma arkasındaki C# kodu, LoadApplication bir örneğini oluşturmak için çağırmalıdır Xamarin.FormsApp . AppUWP uygulamalarının kendisine ait kendi sınıfına sahip olduğundan emin olmak için uygulama ad alanını açıkça kullanmak iyi bir uygulamadır AppXamarin.Forms .
public sealed partial class MainPage
{
public MainPage()
{
InitializeComponent();
LoadApplication(new YOUR_NAMESPACE.App());
}
}
Forms.Init()UWP projesindeki Forms.Init() öğesinden çağrılması gerektiğini unutmayın.
daha fazla bilgi için, uwp 'yi hedefmeyen mevcut bir çözüme uwp projesi ekleme adımlarını içeren kurulum Windows projeleri' ne bakın .