Xamarin.Forms Klasa aplikacji
Klasa Application
bazowa oferuje następujące funkcje, które są widoczne w domyślnej App
podklasie projektów:
- Właściwość
MainPage
, w której należy ustawić stronę początkową aplikacji. - Trwały
Properties
słownik do przechowywania prostych wartości w ramach zmian stanu cyklu życia. - Właściwość statyczna
Current
zawierająca odwołanie do bieżącego obiektu aplikacji.
Uwidacznia również metody cyklu życia, takie jak OnStart
, OnSleep
i OnResume
oraz zdarzenia nawigacji modalnej.
W zależności od wybranego App
szablonu klasę można zdefiniować na jeden z dwóch sposobów:
- C#, lub
- XAML i C#
Aby utworzyć klasę aplikacji przy użyciu języka XAML, domyślna klasa aplikacji musi zostać zastąpiona klasą aplikacji XAML i skojarzonym kodem, jak pokazano w poniższym przykładzie kodu:
<Application xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Photos.App">
</Application>
W poniższym przykładzie kodu pokazano skojarzony kod za:
public partial class App : Application
{
public App ()
{
InitializeComponent ();
MainPage = new HomePage ();
}
...
}
Oprócz ustawiania MainPage
właściwości kod-behind musi również wywołać metodę InitializeComponent
w celu załadowania i przeanalizowania skojarzonego kodu XAML.
Właściwość MainPage
Właściwość MainPage
w Application
klasie ustawia stronę główną aplikacji.
Możesz na przykład utworzyć logikę w App
klasie, aby wyświetlić inną stronę w zależności od tego, czy użytkownik jest zalogowany, czy nie.
Właściwość powinna być ustawiona MainPage
w konstruktorze App
.
public class App : Xamarin.Forms.Application
{
public App ()
{
MainPage = new ContentPage { Title = "App Lifecycle Sample" }; // your page here
}
}
Słownik właściwości
Podklasa Application
ma słownik statyczny Properties
, który może służyć do przechowywania danych, w szczególności do użycia w metodach OnStart
, OnSleep
i OnResume
. Dostęp do tego można uzyskać z dowolnego miejsca w Xamarin.Forms kodzie przy użyciu polecenia Application.Current.Properties
.
Słownik Properties
używa string
klucza i przechowuje object
wartość.
Można na przykład ustawić właściwość trwałą "id"
w dowolnym miejscu w kodzie (po wybraniu elementu w metodzie strony OnDisappearing
lub metodzie OnSleep
) w następujący sposób:
Application.Current.Properties ["id"] = someClass.ID;
W metodach OnStart
lub OnResume
możesz użyć tej wartości, aby odtworzyć środowisko użytkownika w jakiś sposób. Słownik Properties
przechowuje object
wartości, więc należy rzutować jej wartość przed użyciem.
if (Application.Current.Properties.ContainsKey("id"))
{
var id = Application.Current.Properties ["id"] as int;
// do something with id
}
Zawsze sprawdzaj obecność klucza przed uzyskaniem do niego dostępu, aby zapobiec nieoczekiwanym błędom.
Uwaga
Słownik Properties
może serializować tylko typy pierwotne magazynu. Próba przechowywania innych typów (takich jak List<string>
) może zakończyć się niepowodzeniem w trybie dyskretnym.
Trwałość
Słownik Properties
jest zapisywany automatycznie na urządzeniu.
Dane dodane do słownika będą dostępne, gdy aplikacja wróci z tła, a nawet po ponownym uruchomieniu.
Xamarin.Forms 1.4 wprowadzono dodatkową metodę w Application
klasie — SavePropertiesAsync()
którą można wywołać w celu proaktywnego utrwalania słownika Properties
. Ma to na celu zapisanie właściwości po ważnych aktualizacjach, a nie ryzyko ich serializacji z powodu awarii lub zabicia przez system operacyjny.
Odwołania do używania słownika można znaleźć w podręczniku Properties
Tworzenie aplikacji Xamarin.Formsmobilnych (zobacz rozdziały 6, 15 i 20) oraz w skojarzonych przykładach.
klasa aplikacji
Application
Kompletna implementacja klasy jest pokazana poniżej w celu uzyskania informacji referencyjnych:
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");
}
}
Ta klasa jest następnie tworzone w każdym projekcie specyficznym dla platformy i przekazywane do LoadApplication
metody, w której MainPage
element jest ładowany i wyświetlany użytkownikowi.
Kod dla każdej platformy jest wyświetlany w poniższych sekcjach. Najnowsze Xamarin.Forms szablony rozwiązań zawierają już cały ten kod, wstępnie skonfigurowany dla aplikacji.
Projekt systemu iOS
Klasa systemu iOS AppDelegate
dziedziczy z FormsApplicationDelegate
klasy . Powinien on:
Wywołaj
LoadApplication
metodę za pomocą wystąpieniaApp
klasy .Zawsze zwracaj wartość
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 systemu Android
System Android MainActivity
dziedziczy z elementu FormsAppCompatActivity
. W przesłonięć OnCreate
metodę LoadApplication
jest wywoływana z wystąpieniem App
klasy.
[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
}
}
Projekt uniwersalny systemu Windows (UWP) dla systemu Windows 10
Strona główna w projekcie platformy UWP powinna dziedziczyć z WindowsPage
elementu :
<forms:WindowsPage
...
xmlns:forms="using:Xamarin.Forms.Platform.UWP"
...>
</forms:WindowsPage>
Kod języka C# stojący za konstrukcją musi wywołać LoadApplication
metodę , aby utworzyć wystąpienie obiektu Xamarin.FormsApp
. Należy pamiętać, że dobrym rozwiązaniem jest jawne użycie przestrzeni nazw aplikacji w celu zakwalifikowania App
jej, ponieważ aplikacje platformy UWP mają również własną App
klasę niepowiązaną Xamarin.Formsz klasą .
public sealed partial class MainPage
{
public MainPage()
{
InitializeComponent();
LoadApplication(new YOUR_NAMESPACE.App());
}
}
Należy pamiętać, że Forms.Init()
należy wywołać z App.xaml.cs w projekcie platformy UWP.
Aby uzyskać więcej informacji, zobacz Konfigurowanie projektów systemu Windows, w tym kroki dodawania projektu platformy UWP do istniejącego Xamarin.Forms rozwiązania, które nie jest przeznaczone dla platformy UWP.
Powiązany film wideo
Więcej filmów na platformie Xamarin można znaleźć w witrynach Channel 9 i YouTube.