آموزش کلاس App در زامارین فرم
کلاس پایه App دارای ویژگی های زیر است :
- خصوصیت
MainPageکه صفحه اصلی برنامه را مشخص می کند - خصوصیت
ResourceDictionaryبرای تعریف منابع در سطح برنامه به کار می رود. اموزش ResourceDictionary در این مقاله اماده شده است. - متد استاتیک
Currentبرای ارجاع داده به یک شی از برنامه جاری . به عبارتی متدی شبه متدcontext.currentدر asp.net - چهار متد چرخه حیات برنامه از جمله زمان استارت برنامه و زمان Sleep برنامه و زمان ادامه کار برنامه
بسته به اینکه چه الگویی را انتخاب کرده اید ، کلاس App را می توان به یکی از دو روش تعریف کرد:
C#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 می باشد که باید شرایط زیر را داشته باشد.
- فراخوانی کلاس
LoadApplicationهمراه یک نمونه از کلاسAppبرای اجرای نرم افزار - برگشت متد
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 نظر ثبت شده است