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 OnStartjsou , OnSleepa 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 OnStartOnSleep, 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á objecthodnoty 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ří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 přepsání OnCreateLoadApplication 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.

Další videa o Xamarinu najdete na Channel 9 a YouTube.