【Xamarin.Forms】App类——默认App类的功能,可以是C#或XAML

简介: 应用程序基类提供以下功能,这些功能在您的项目默认应用程序子类中公开: 一个MainPage属性,它是为应用程序设置初始页面的地方。 持久性属性字典,用于跨生命周期状态更改存储简单值。

应用程序基类提供以下功能,这些功能在您的项目默认应用程序子类中公开:

  • 一个MainPage属性,它是为应用程序设置初始页面的地方。
  • 持久性属性字典,用于跨生命周期状态更改存储简单值。
  • 包含对当前应用程序对象的引用的静态Current属性。

还暴露生命周期方法,如OnStart,OnSleep和OnResume以及模态导航事件。
根据您选择的模板,可以通过以下两种方式之一来定义App类:

  • C#,或者
  • XAML & C#

要使用XAML创建应用程序类,默认应用程序类必须替换为XAML应用程序类和关联的代码隐藏,如以下代码示例所示:

点击(此处)折叠或打开

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

  2. /Application>
下面的代码示例显示了相关的代码隐藏:

点击(此处)折叠或打开

  1. public partial class App : Application
  2. {
  3.     public App ()
  4.     {
  5.         InitializeComponent ();
  6.         MainPage = new HomePage ();
  7.     }
  8.     ...
  9. }
除了设置MainPage属性外,代码隐藏还必须调用InitializeComponent方法以加载和分析关联的XAML。


MainPage属性

Application类的MainPage属性设置应用程序的根页面。
例如,您可以在App类中创建逻辑,以根据用户是否登录来显示不同的页面。
MainPage属性应该在App构造函数中设置,

点击(此处)折叠或打开

  1. public class App : Xamarin.Forms.Application
  2. {
  3.     public App ()
  4.     {
  5.         MainPage = new ContentPage { Title = "App Lifecycle Sample" }; // your page here
  6.     }
  7. }


属性字典

Application子类具有一个静态属性字典,可用于存储数据,特别适用于OnStart,OnSleep和OnResume方法。 这可以使用Application.Current.Properties从Xamarin.Forms代码中的任何地方访问。
属性字典使用字符串键并存储对象值。
例如,你可以在你的代码的任何地方设置一个持久的“id”属性(当一个项目被选中,在一个页面的OnDisappearing方法或者OnSleep方法中),像这样:

点击(此处)折叠或打开

  1. Application.Current.Properties ["id"] = someClass.ID;
在OnStart或OnResume方法中,您可以使用此值以某种方式重新创建用户的体验。 属性字典存储对象,所以在使用它之前需要转换它的值。

点击(此处)折叠或打开

  1. if (Application.Current.Properties.ContainsKey("id"))
  2. {
  3.     var id = Application.Current.Properties ["id"] as int;
  4.     // do something with id
  5. }
在访问密钥之前,请始终检查密钥是否存在以防意外错误。



注意:“属性”字典只能序列化原始类型进行存储。 试图存储其他类型(如List )可能会失败。

持久化

属性字典自动保存到设备。 添加到字典中的数据将在应用程序从后台返回或重新启动后可用。
Xamarin.Forms 1.4在Application类中引入了一个额外的方法--SavePropertiesAsync() - 可以调用它来主动保留属性字典。 这是为了让您在重要更新之后保存属性,而不是由于崩溃或被操作系统杀死而导致无法序列化。
您可以在“使用Xamarin.Forms创建移动应用程序”第6,15和20章以及相关示例中找到使用“属性”字典的参考。

应用程序类

下面显示了一个完整的Application类实现供参考:

点击(此处)折叠或打开

  1. public class App : Xamarin.Forms.Application
  2. {
  3.     public App ()
  4.     {
  5.         MainPage = new ContentPage { Title = "App Lifecycle Sample" }; // your page here
  6.     }

  7.     protected override void OnStart()
  8.     {
  9.         // Handle when your app starts
  10.         Debug.WriteLine ("OnStart");
  11.     }

  12.     protected override void OnSleep()
  13.     {
  14.         // Handle when your app sleeps
  15.         Debug.WriteLine ("OnSleep");
  16.     }

  17.     protected override void OnResume()
  18.     {
  19.         // Handle when your app resumes
  20.         Debug.WriteLine ("OnResume");
  21.     }
  22. }

然后在每个特定于平台的项目中对这个类进行实例化,并将其传递给LoadApplication方法,该方法是MainPage加载并显示给用户的地方。 每个平台的代码显示在下面的部分。 最新的Xamarin.Forms解决方案模板已经包含了所有为你的应用程序预配置的代码。


iOS项目

iOS AppDelegate类现在从FormsApplicationDelegate继承。 这应该:

  • 使用App类的实例调用LoadApplication。

  • 总是返回base.FinishedLaunching(应用程序,选项);。

    点击(此处)折叠或打开

    1. [Register ("AppDelegate")]
    2. public partial class AppDelegate :
    3.     global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate // superclass new in 1.3
    4. {
    5.     public override bool FinishedLaunching (UIApplication app, NSDictionary options)
    6.     {
    7.         global::Xamarin.Forms.Forms.Init ();

    8.         LoadApplication (new App ()); // method is new in 1.3

    9.         return base.FinishedLaunching (app, options);
    10.     }
    11. }


Android项目t

Android MainActivity现在从FormsApplicationActivity继承。 在OnCreate覆盖中,使用App类的实例调用LoadApplication方法。

点击(此处)折叠或打开

  1. [Activity (Label = "App Lifecycle Sample", Icon = "@drawable/icon", MainLauncher = true,
  2.     ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
  3. public class MainActivity :
  4.     global::Xamarin.Forms.Platform.Android.FormsApplicationActivity // superclass new in 1.3
  5. {
  6.     protected override void OnCreate (Bundle bundle)
  7.     {
  8.         base.OnCreate (bundle);

  9.         global::Xamarin.Forms.Forms.Init (this, bundle);

  10.         LoadApplication (new App ()); // method is new in 1.3
  11.     }
  12. }


注意:有一个更新的FormsAppCompatActivity基类,可用于更好地支持Android Material Design。 这将成为未来的默认Android模板,但您可以按照这些说明来更新您现有的Android应用程序。

Windows电话项目

Windows Phone(基于Silverlight的)项目中的主页应该从FormsApplicationPage继承。 这意味着XAML和MainPage的C#引用FormsApplicationPage类,如图所示。
XAML使用自定义名称空间,以便根元素反映FormsApplicationPage类:

点击(此处)折叠或打开

  1. winPhone:FormsApplicationPage
  2.    ...
  3.    xmlns:winPhone="clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8"
  4.     ...>
  5. /winPhone:FormsApplicationPage>

C#继承自FormsApplicationPage类,并调用LoadApplication来创建Xamarin.Forms应用程序的一个实例。 请注意,明确使用应用程序名称空间来限定应用程序是一种很好的做法,因为Windows Phone应用程序也具有与Xamarin.Forms无关的自己的App类。


public partial class MainPage :  global::Xamarin.Forms.Platform.WinPhone.FormsApplicationPage // superclass new in 1.3 {  public MainPage()  {  InitializeComponent();  SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape;   global::Xamarin.Forms.Forms.Init();  LoadApplication(new YOUR_APP_NAMESPACE.App()); // new in 1.3, use the correct namespace  }  }

点击(此处)折叠或打开

  1. public partial class MainPage :
  2.     global::Xamarin.Forms.Platform.WinPhone.FormsApplicationPage // superclass new in 1.3
  3. {
  4.     public MainPage()
  5.     {
  6.         InitializeComponent();
  7.         SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape;

  8.         global::Xamarin.Forms.Forms.Init();
  9.         LoadApplication(new YOUR_APP_NAMESPACE.App()); // new in 1.3, use the correct namespace
  10.     }
  11.  }

Windows 8.1项目

Windows 8.1(基于WinRT的)项目中的主页现在应该从WindowsPage继承。 这意味着MainPage的XAML引用WindowsPage类,如下所示:
XAML使用自定义名称空间,以便根元素反映FormsApplicationPage类:

点击(此处)折叠或打开

  1. forms:WindowsPage
  2.    ...
  3.    xmlns:forms="using:Xamarin.Forms.Platform.WinRT"
  4.    ...>
  5. /forms:WindowsPage>

C#代码隐藏的构造必须调用LoadApplication来创建Xamarin.Forms应用程序的一个实例。 请注意,明确使用应用程序名称空间来限定应用程序是一种很好的做法,因为UWP应用程序也具有与Xamarin.Forms无关的自己的App类。

点击(此处)折叠或打开

  1. public partial class MainPage
  2. {
  3.     public MainPage()
  4.     {
  5.         InitializeComponent();
  6.         LoadApplication(new YOUR_APP_NAMESPACE.App());
  7.     }
  8.  }
请注意Forms.Init()必须在第65行的App.xaml.cs中调用。


用于Windows 10的通用Windows项目(UWP)

Xamarin.Forms中的通用Windows项目支持目前处于预览状态。

UWP项目中的主页面应该从WindowsPage继承。 这意味着XAML和MainPage的C#引用FormsApplicationPage类,如图所示。
XAML使用自定义名称空间,以便根元素反映FormsApplicationPage类:

点击(此处)折叠或打开

  1. forms:WindowsPage
  2.    ...
  3.    xmlns:forms="using:Xamarin.Forms.Platform.UWP"
  4.    ...>
  5. /forms:WindowsPage>
C#代码隐藏的构造必须调用LoadApplication来创建Xamarin.Forms应用程序的一个实例。 请注意,明确使用应用程序名称空间来限定应用程序是一种很好的做法,因为UWP应用程序也具有与Xamarin.Forms无关的自己的App类。

点击(此处)折叠或打开

  1. public sealed partial class MainPage
  2. {
  3.     public MainPage()
  4.     {
  5.         InitializeComponent();

  6.         LoadApplication(new YOUR_NAMESPACE.App());
  7.     }
  8.  }
请注意,Forms.Init()必须在第63行的App.xaml.cs中调用。


目录
相关文章
|
11天前
|
NoSQL 应用服务中间件 PHP
布谷一对一直播源码服务器环境配置及app功能
一对一直播源码阿里云服务器环境配置及要求
|
10天前
|
小程序 数据挖掘 UED
开发1个上门家政小程序APP系统,都有哪些功能?
在快节奏的现代生活中,家政服务已成为许多家庭的必需品。针对传统家政服务存在的问题,如服务质量不稳定、价格不透明等,我们历时两年开发了一套全新的上门家政系统。该系统通过完善信用体系、提供奖励机制、优化复购体验、多渠道推广和多样化盈利模式,解决了私单、复购、推广和盈利四大痛点,全面提升了服务质量和用户体验,旨在成为家政行业的领导者。
|
2月前
|
开发工具
uniapp, 短剧视频类App实现参考,支持滑动播放,仿抖音 仿陌陌 短视频 无限滑动播放 视频流
阿里云点播服务web播放器sdk,短剧视频类App实现参考。仿抖音 仿陌陌 短视频 无限滑动播放 视频流。无uniapp video 原生组件的层级、遮挡、覆盖问题,适合与不同功能视图组合使用,实现丰富的应用功能。
uniapp, 短剧视频类App实现参考,支持滑动播放,仿抖音 仿陌陌 短视频 无限滑动播放 视频流
|
7天前
|
机器人
布谷直播App系统源码开发之后台管理功能详解
直播系统开发搭建管理后台功能详解!
|
2月前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
3月前
|
Java PHP
【应用服务 App Service】 App Service Rewrite 实例 - 反向代理转发功能
【应用服务 App Service】 App Service Rewrite 实例 - 反向代理转发功能
【应用服务 App Service】 App Service Rewrite 实例 - 反向代理转发功能
|
3月前
|
Python
【Azure 应用服务】App Service的运行状况检查功能失效,一直提示"实例运行不正常"
【Azure 应用服务】App Service的运行状况检查功能失效,一直提示"实例运行不正常"
|
3月前
|
测试技术
一款功能完善的智能匹配1V1视频聊天App应该通过的测试CASE
文章列举了一系列针对1V1视频聊天App的测试用例,包括UI样式、权限请求、登录流程、匹配逻辑、消息处理、充值功能等多个方面的测试点,并标注了每个测试用例的执行状态,如通过(PASS)、失败(FAIL)或需要进一步处理(延期修改、待定、方案再定等)。
64 0
|
3月前
|
Linux C++ Docker
【Azure 应用服务】App Service for Linux 中实现 WebSocket 功能 (Python SocketIO)
【Azure 应用服务】App Service for Linux 中实现 WebSocket 功能 (Python SocketIO)
|
3月前
|
监控 安全 前端开发
【Azure 应用服务】App Service 运行状况健康检查功能简介 (Health check)
【Azure 应用服务】App Service 运行状况健康检查功能简介 (Health check)

热门文章

最新文章

下一篇
无影云桌面