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á Current vlastnost, 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 LoadApplication s instancí App tří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.

Další videa Xamarin najdete na webu Channel 9 a YouTube.