Xamarin.Forms App – třída
ApplicationZákladní třída nabízí následující funkce, které jsou vystaveny v projektech výchozí App podtřídou:
MainPageVlastnost, která má nastavit počáteční stránku aplikace- Trvalý slovník pro ukládání jednoduchých hodnot v rámci změny stavu životního cyklu.
- Statická
Currentvlastnost, která obsahuje odkaz na aktuální objekt aplikace.
Také zveřejňuje metody životního cyklu , jako jsou , OnSleep a OnResume i události modální navigace.
V závislosti na šabloně, kterou jste zvolili, App může být třída definována jedním ze dvou způsobů:
- C#nebo
- XAML C #
Chcete-li vytvořit třídu aplikace pomocí jazyka XAML, výchozí třídu aplikace musí být nahrazena třídou aplikace XAML a přidruženým kódem na pozadí, jak je znázorněno v následujícím příkladu kódu:
<Application xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Photos.App">
</Application>
Následující příklad kódu ukazuje přidružený kód na pozadí:
public partial class App : Application
{
public App ()
{
InitializeComponent ();
MainPage = new HomePage ();
}
...
}
A také nastavení Xamarin_Forms _Application_MainPage "data-LINKTYPE =" absolutní cesta ">MainPage vlastnost, kód na pozadí musí také volat InitializeComponent metodu pro načtení a analýzu asociovaného XAML.
Vlastnost MainPage
MainPageVlastnost Application třídy nastaví kořenovou stránku aplikace.
Můžete například vytvořit logiku ve App třídě pro zobrazení jiné stránky v závislosti na tom, zda je uživatel přihlášen nebo nikoli.
MainPageVlastnost by měla být nastavena v App konstruktoru,
public class App : Xamarin.Forms.Application
{
public App ()
{
MainPage = new ContentPage { Title = "App Lifecycle Sample" }; // your page here
}
}
Slovník vlastností
ApplicationPodtřída má statický Properties slovník, který lze použít k ukládání dat, zejména pro použití v OnStartOnSleepOnResume metodách, a. K tomu lze přistupovat odkudkoli v Xamarin.Forms kódu pomocí Application.Current.Properties .
PropertiesSlovník používá string klíč a ukládá object hodnotu.
Můžete například nastavit trvalou "id" vlastnost kdekoli v kódu (když je vybrána položka, v OnDisappearing metodě stránky nebo v OnSleep metodě) takto:
Application.Current.Properties ["id"] = someClass.ID;
V OnStartOnResume metodách nebo můžete tuto hodnotu použít k opětovnému vytvoření uživatelského prostředí. PropertiesSlovník ukládá do úložiště object , takže před použitím je nutné přetypovat jeho hodnotu.
if (Application.Current.Properties.ContainsKey("id"))
{
var id = Application.Current.Properties ["id"] as int;
// do something with id
}
Před neočekávanými chybami vždy vyhledejte přítomnost klíče před jeho přístupem.
Poznámka
Slovník Properties může serializovat pouze primitivní typy úložiště. Pokus o uložení jiných typů (například List<string> ) může selhat v tichém režimu.
Dočasné
PropertiesSlovník se automaticky uloží do zařízení.
Data přidaná do slovníku budou k dispozici, jakmile se aplikace vrátí z pozadí, nebo i po jejím restartování.
Xamarin.Forms 1,4 zavádí další metodu pro třídu, ApplicationSavePropertiesAsync() která může být volána k proaktivnímu uchování Properties slovníku. To vám umožní uložit vlastnosti i po důležitých aktualizacích, a ne nebezpečí, že by se nemusela serializovat kvůli selhání nebo je může ukončit operační systém.
Odkazy na použití slovníku můžete najít Properties v části Properties využitím knih kapitoly Xamarin.Forms, 15a 20a v přidružených ukázkách.
Třída aplikace
Kompletní Application implementace třídy je zobrazena níže pro referenci:
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");
}
}
Tato třída je pak vytvořena v každém projektu specifickém pro danou platformu a je předána LoadApplication metodě, kde je MainPage načten a zobrazen uživateli.
Kód pro každou platformu je uveden v následujících částech. Nejnovější Xamarin.Forms šablony řešení už obsahují veškerý tento kód, který je pro vaši aplikaci předem nakonfigurovaný.
projekt iOS
Třída iOS AppDelegate dědí z FormsApplicationDelegate . Měl by:
Zavolejte
LoadApplications instancíApptřídy.Vždy vrátit
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);
}
}
Projekt pro Android
Android MainActivity dědí z FormsAppCompatActivity . V OnCreate přepsání LoadApplication metody je volána s instancí App třídy.
[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
}
}
univerzální Windows projekt (UWP) pro Windows 10
Hlavní stránka v projektu UWP by měla dědit z WindowsPage :
<forms:WindowsPage
...
xmlns:forms="using:Xamarin.Forms.Platform.UWP"
...>
</forms:WindowsPage>
Kód jazyka C# za konstrukcí musí volat LoadApplication , aby se vytvořila instance Xamarin.FormsApp . Všimněte si, že je vhodné explicitně použít obor názvů aplikace k zařazení do, App protože aplikace UWP mají také svou vlastní App třídu, která nesouvisí s Xamarin.Forms .
public sealed partial class MainPage
{
public MainPage()
{
InitializeComponent();
LoadApplication(new YOUR_NAMESPACE.App());
}
}
Všimněte si, že Forms.Init() se musí volat ze souboru Forms.Init() v projektu UWP.
další informace najdete v tématu instalace Windows projekty, které zahrnují postup přidání projektu UWP do existujícího řešení, které necílí na UWP.