Xamarin.Forms 基础——App Class

应用程序类

默认App类的功能,可以是C#或XAML

PDF用于离线使用

让我们知道你对此的感受

最后更新:2016年2月

Application基类提供了以下功能,这是在项目的默认露App子类:

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

如果还自曝生命周期方法,如OnStartOnSleepOnResume以及模式导航事件。

根据您选择的模板,App可以通过以下两种方式之一定义该类:

  • C#,或
  • XAML&C#

要使用XAML 创建一个App类,默认的App类必须被替换为XAML App类和相关的代码隐藏,如下面的代码示例所示:

<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 HomePage ();
    }
    ...
}

除了设置MainPage属性之外,代码隐藏也必须调用该InitializeComponent方法来加载和解析关联的XAML。

MainPage属性

MainPage对房地产Application类设置应用程序的根页面。

例如,您可以在App类中创建逻辑,以根据用户是否登录来显示不同的页面。

MainPage属性应该在App构造函数中设置,

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

属性词典

Application子类具有静态Properties可用于存储数据,特别是用于在使用词典OnStartOnSleepOnResume方法。这可以从您在Xamarin.Forms代码中使用的任何地方访问Application.Current.Properties

Properties词典使用string键和存储的object值。

例如,您可以"id"在代码中的任何位置(选择项目,页面OnDisappearing方法或OnSleep方法中)设置一个持久性属性,如下所示:

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

OnStartOnResume方法中,您可以使用此值以某种方式重新创建用户的体验。该Properties字典中存储object如此的,你需要使用它之前投它的价值。

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

在访问密钥之前,请始终检查密钥的存在以防止出现意外错误。

注:Properties词典只能序列化基本类型进行存储。尝试存储其他类型(如  List<string>可以静默地失败。

坚持

Properties词典是自动保存到设备。当应用程序从后台返回,甚至在重新启动后,添加到字典中的数据将可用。

Xamarin.Forms 1.4在Application类 上引入了一个额外的方法SavePropertiesAsync()- 可以调用它来主动保留Properties字典。这是为了允许您在重要更新后保存属性,而不是由于崩溃或操作系统被杀死而无法序列化。

你可以找到参考使用Properties字典中 与Xamarin.Forms创建移动应用书籍章节6, 15,和20,以及相关的 样品

应用程序类

完整的Application类实现如下所示:

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

该类然后在每个特定于平台的项目实例化并传递到 LoadApplication它是其中该方法MainPage被加载并显示给用户。以下各节显示每个平台的代码。最新的Xamarin.Forms解决方案模板已包含所有这些代码,为您的应用程序预配置。

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现在继承了FormsApplicationActivity。在OnCreate覆盖中,该LoadApplication方法使用App类的实例调用。

[Activity (Label = "App Lifecycle Sample", Icon = "@drawable/icon", MainLauncher = true,
    ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity :
    global::Xamarin.Forms.Platform.Android.FormsApplicationActivity // superclass new in 1.3
{
    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
    }
}
注意:有一个较新的  FormsAppCompatActivity 基类可用于更好地支持Android Material Design。这将成为未来的默认Android模板,但您可以按照  这些说明 更新现有的Android应用程序。

Windows Phone项目

Windows Phone(Silverlight)项目中的主页应该继承FormsApplicationPage。这意味着XAML和C#用于MainPage引用FormsApplicationPage所示的类。

XAML使用自定义命名空间,以便根元素反映FormsApplicationPage类:

<winPhone:FormsApplicationPage
   ...
   xmlns:winPhone="clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8"
    ...>
</winPhone:FormsApplicationPage>

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

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

Windows 8.1项目

Windows 8.1(WinRT) 项目中的主页现在应该继承 WindowsPage。这意味着XAML用于MainPage 引用WindowsPage类,如下所示:

XAML使用自定义命名空间,以便根元素反映FormsApplicationPage类:

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

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

public partial class MainPage
{
    public MainPage()
    {
        InitializeComponent();
        LoadApplication(new YOUR_APP_NAMESPACE.App());
    }
 }

请注意,Forms.Init()必须在第65行的App.xaml.cs中调用它。

Windows 10的通用Windows项目(UWP)

XAMarin.Forms中的通用Windows项目支持目前在“预览”中。

UWP项目的主页应该继承WindowsPage。这意味着XAML和C#用于MainPage引用FormsApplicationPage所示的类。

XAML使用自定义命名空间,以便根元素反映FormsApplicationPage类:

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

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

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

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

请注意,Forms.Init()必须在第63行周围的App.xaml.cs中调用它。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值