Xamarin.Forms Třída aplikace
Základní Application
třída nabízí následující funkce, které jsou vystaveny ve výchozí App
podtřídě projektů:
- Jedná se o
MainPage
vlastnost, která slouží k nastavení počáteční stránky aplikace. - Trvalý
Properties
slovník pro ukládání jednoduchých hodnot napříč změnami stavu životního cyklu. - Statická
Current
vlastnost, která obsahuje odkaz na aktuální objekt aplikace.
Také zveřejňuje metody životního cyklu, jako OnStart
jsou , OnSleep
a OnResume
také modální navigační události.
V závislosti na zvolené App
šabloně může být třída definována jedním ze dvou způsobů:
- C# nebo
- XAML &C#
Pokud chcete vytvořit třídu aplikace pomocí XAML, musí být výchozí třída aplikace nahrazena třídou aplikace XAML a přidruženým kódem, 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 za sebou:
public partial class App : Application
{
public App ()
{
InitializeComponent ();
MainPage = new HomePage ();
}
...
}
Kromě nastavení MainPage
vlastnosti musí kód-behind také volat metodu InitializeComponent
načtení a parsování přidružené XAML.
MainPage – vlastnost
Vlastnost MainPage
třídy Application
nastaví kořenovou stránku aplikace.
Můžete například vytvořit logiku ve třídě App
, která zobrazí jinou stránku v závislosti na tom, jestli je uživatel přihlášený nebo ne.
Vlastnost MainPage
by měla být nastavena v konstruktoru App
,
public class App : Xamarin.Forms.Application
{
public App ()
{
MainPage = new ContentPage { Title = "App Lifecycle Sample" }; // your page here
}
}
Slovník vlastností
Podtřída Application
má statický Properties
slovník, který lze použít k ukládání dat, zejména pro použití v OnStart
OnSleep
, a OnResume
metody. K tomuto přístupu můžete přistupovat odkudkoliv v Xamarin.Forms kódu pomocí Application.Current.Properties
.
Slovník Properties
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 metodě stránky OnDisappearing
nebo v OnSleep
metodě), například takto:
Application.Current.Properties ["id"] = someClass.ID;
OnStart
V těchto metodách OnResume
pak můžete tuto hodnotu použít k opětovnému vytvoření uživatelského prostředí nějakým způsobem. Slovník Properties
ukládá object
hodnoty tak, abyste před použitím museli přetypovat jeho hodnotu.
if (Application.Current.Properties.ContainsKey("id"))
{
var id = Application.Current.Properties ["id"] as int;
// do something with id
}
Před přístupem k němu vždy zkontrolujte přítomnost klíče, abyste zabránili neočekávaným chybám.
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 bezobslužně selhat.
Uchování
Slovník Properties
se automaticky uloží do zařízení.
Data přidaná do slovníku budou k dispozici, když se aplikace vrátí z pozadí nebo i po restartování.
Xamarin.Forms 1.4 zavedla další metodu Application
třídy , SavePropertiesAsync()
která se dá volat k proaktivnímu zachování slovníku Properties
. To vám umožní uložit vlastnosti po důležitých aktualizacích a neriskovat jejich serializaci kvůli chybovému ukončení nebo ukončení operačního systému.
Odkazy na použití slovníku Properties
najdete v knize Vytváření mobilních aplikací Xamarin.Forms (viz kapitoly 6, 15 a 20) a v přidružených ukázkách.
Třída aplikace
Kompletní Application
implementace třídy je uvedena 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 se pak vytvoří instance v každém projektu specifickém pro platformu a předá LoadApplication
metodě, která je tam, kde MainPage
je načtena a zobrazena uživateli.
Kód pro každou platformu je uvedený v následujících částech. Xamarin.Forms Nejnovější šablony řešení už obsahují veškerý tento kód předkonfigurovaný pro vaši aplikaci.
Projekt iOS
Třída iOS AppDelegate
dědí z FormsApplicationDelegate
. Měla by:
Volání
LoadApplication
s instancíApp
třídyVž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 přepsání OnCreate
LoadApplication
metoda 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í projekt Windows (UPW) pro Windows 10
Hlavní stránka projektu UPW 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
k vytvoření instance vaší Xamarin.FormsApp
. Mějte na paměti, že je vhodné explicitně použít obor názvů aplikace k kvalifikaci App
, protože aplikace UPW mají také svou vlastní App
třídu nesouvisející s Xamarin.Forms.
public sealed partial class MainPage
{
public MainPage()
{
InitializeComponent();
LoadApplication(new YOUR_NAMESPACE.App());
}
}
Všimněte si, že Forms.Init()
je nutné volat z App.xaml.cs v projektu UPW.
Další informace najdete v tématu Nastavení projektů systému Windows, včetně kroků pro přidání projektu UPW do existujícího Xamarin.Forms řešení, které není cílem UPW.