آموزش کلاس App در زامارین فرم

آموزش کلاس App در زامارین فرم

آموزش کلاس App در زامارین فرم

کلاس پایه App دارای ویژگی های زیر است :

  1. خصوصیت MainPage که صفحه اصلی برنامه را مشخص می کند
  2. خصوصیت ResourceDictionary برای تعریف منابع در سطح برنامه به کار می رود. اموزش ResourceDictionary در این مقاله اماده شده است.
  3. متد استاتیک Current برای ارجاع داده به یک شی از برنامه جاری . به عبارتی متدی شبه متد  context.current  در asp.net
  4. چهار متد چرخه حیات برنامه از جمله زمان استارت برنامه و زمان Sleep برنامه  و  زمان ادامه کار برنامه

بسته به اینکه چه الگویی را انتخاب کرده اید ، کلاس App را می توان به یکی از دو روش تعریف کرد:

  1. C#
  2. XAML & C#

در مثال زیر نحوه تعریف کلاس App با استفاده از XAML و همراه code-behind نشان داده شده است

<Application xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Photos.App">

</Application>

کد سی شارپ

public partial class App : Application
{
    public App ()
    {
        InitializeComponent ();
        MainPage = new NavigationPage(new MainPage());
    }
    ...
}

در کد بالا علاوه بر تعریف MainPage اولیه برنامه ، متد InitializeComponent برای اجرای کامپوننت های  توکار مورد نیاز برنامه زامارین فرم فراخوانی شده است

MainPage property

ویژگی MainPage در کلاس App صفحه اصلی برنامه را تنظیم می کند. به عنوان مثال ، شما می توانید منطقی در کلاس App خود ایجاد کنید تا بسته به اینکه کاربر به سیستم وارد شده باشد یا خیر ، صفحه دیگری را نمایش دهد. ویژگی MainPage باید در سازنده کلاس App تنظیم شود .

public class App : Xamarin.Forms.Application
{
    public App ()
    {
        MainPage = new NavigationPage(new MainPage());// or Login page  
    }
}

Properties dictionary

زیر کلاس Application دارای Properties dictionary استاتیک است که می تواند برای ذخیره داده ها به ویژه برای استفاده در روش های OnStart ، OnSleep و OnResume مورد استفاده قرار گیرد. با استفاده از Application.Current.Properties از هرجای کد Xamarin.Forms می توانید به این مورد دسترسی پیدا کنید. دیکشنری Properties dictionary از یک کلید از نوع رشته استفاده می کند و یک مقدار شی را ذخیره می کند.

به عنوان مثال ، شما می توانید یک ویژگی  "id" را در هر کجا از کد خود تنظیم و مقدار دهی کنید (هنگام انتخاب یک مورد یا در روش OnDisappearing یک صفحه یا در روش OnSleep

Application.Current.Properties["id"] = someClass.ID;

سپس در روشهای OnStart یا OnResume یا هر کجای نرم افزار می توانید مقدار تعریف شده را بازیابی کنید . Properties dictionary مقادیر را بصورت اشیا ذخیره می کند بنابراین لازم است قبل از استفاده در کد ، این مقادیر را به نوع مورد نیاز خودتون cast  کنید.

if (Application.Current.Properties.ContainsKey("id"))
{
    var id = Application.Current.Properties["id"] as int;
    // do something with id
}

همیشه قبل از دسترسی به کلید ، وجود آن را بررسی کنید تا از خطاهای غیر منتظره جلوگیری شود.

 Properties dictionary فقط می تواند انواع اولیه را برای ذخیره سازی به صورت سریالی تنظیم کند. تلاش برای ذخیره انواع دیگر (مانند List <string>) منجر به خطا می شود .

ماندگاری (Persistence)

Properties dictionary به طور خودکار در دستگاه ذخیره می شود. داده های اضافه شده به Properties dictionary در صورت بازگشت برنامه از پس زمینه یا حتی پس از راه اندازی مجدد ، در دسترس خواهد بود.

کلاس Application

پیاده سازی کامل کلاس Application در کد زیر نشان داده شده است

public class App : Xamarin.Forms.Application
{
    public App ()
    {
        MainPage = new NavigationPage(new MainPage());// or Login page 
    }

    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");
    }
}

این کلاس در هر پلت فرم خاص (ios , android , uwp ) نمونه سازی شده و با استفاده از متد  LoadApplication  که در آن MainPage بارگذاری می شود و به کاربر نمایش داده می شود . کد هر پلت فرم در بخشهای زیر نشان داده شده است.

iOS

در ios  کلاس AppDelegate مشتق شده از کلاس FormsApplicationDelegate می باشد که باید شرایط زیر را داشته باشد.

  1. فراخوانی کلاس LoadApplication همراه یک نمونه از کلاس App برای اجرای نرم افزار
  2. برگشت متد 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);
    }
}

Android

در Android  کلاس MainActivity مشتق شده از کلاس FormsApplicationDelegate می باشد. همچنین override متد OnCreate باعث ایجاد یک نمونه از کلاس App می شود

[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
    }
}

UWP

صفحه اصلی در پروژه UWP باید از WindowsPage به ارث  بری کند .

<forms:WindowsPage
   ...
   xmlns:forms="using:Xamarin.Forms.Platform.UWP"
   ...>
</forms:WindowsPage>

کد C#  باید متد LoadApplication را فراخوانی شود تا نمونه ای از برنامه Xamarin.Forms شما ایجاد شود. توجه داشته باشید که روش صحیح این است که به صراحت از فضای نام برنامه استفاده کنید زیرا برنامه های UWP کلاس برنامه خاص خود را ندارند و به Xamarin.Forms ارتباطی ندارند.

public sealed partial class MainPage
{
    public MainPage()
    {
        InitializeComponent();

        LoadApplication(new your_name_space.App());
    }
 }

توجه داشته باشید که Forms.Init()  را باید از App.xaml.cs در پروژه UWP فراخوانی کنید.

افزودن نظر جدید

در صورتی که وارد نشده باشید نظر شما بعد از تایید ادمین منتشر خواهد شد

نظرات بدون نمایش ایمیل و شماره تماس منتشر خواهد شد

وارد کردن فیلد های ستاره دار ( * ) الزامی است

 
 
 
 
 

 

0 نظر ثبت شده است