由于该解决方案包含两到六个项目中的任何一个,所以在选择运行或调试应用程序时,必须指定启动哪个程序。
在Visual Studio的解决方案资源管理器中,右键单击五个应用程序项目中的任意一个,然后从菜单中选择Set As StartUp Project项目。 然后,您可以选择部署到仿真器或实际设备。 要构建和运行程序,请选择菜单项Debug> Start Debugging。
在Xamarin Studio的解决方案列表中,单击出现在所选项目右侧的小工具图标,然后从菜单中选择设为启动项目。 然后你可以从主要的人中选择Run> Start Debugging。
如果一切顺利,模板创建的骨架应用程序将运行,您将看到一条短消息:
正如你所看到的,这些平台有不同的配色方案。 iOS和Windows 10 Mobile屏幕在浅色背景上显示深色文字,而Android设备在黑色背景上显示浅色文字。 默认情况下,Windows 8.1和Windows Phone 8.1平台就像Android一样在黑色背景上显示浅色文字。
默认情况下,所有平台都已启用方向更改。 翻转手机,你会看到文字调整到新的中心。
该应用程序不仅在设备或模拟器上运行,而且还可以部署。 它与手机或模拟器上的其他应用程序一起出现,并可以从那里运行。 如果您不喜欢应用程序图标或应用程序名称显示方式,则可以在各个平台项目中进行更改。
显然,由Xamarin.Forms模板创建的程序非常简单,所以这是一个很好的机会来检查生成的代码文件,并找出它们之间的相互关系以及它们是如何工作的。
让我们从负责绘制您在屏幕上看到的文本的代码开始。 这是Hello项目中的App类。 在由Visual Studio创建的项目中,App类是在App.cs文件中定义的,但在Xamarin Studio中,该文件是Hello.cs。 如果项目模板自本章编写以来没有太多变化,可能看起来像这样:
请注意,名称空间与项目名称相同。这个App类被定义为public,并从Xamarin.Forms应用程序类派生。构造函数真的只有一个责任:将Application类的MainPage属性设置为Page类型的对象。
Xamarin.Forms模板在这里生成的代码显示了一个非常简单的方法来定义此构造函数:ContentPage类派生自Page,在单页Xamarin.Forms应用程序中非常常见。 (在本书中你会看到许多ContentPage)。除了Android屏幕顶部的状态栏,Android屏幕底部的按钮和状态栏外,它占据了手机屏幕的大部分在Windows Phone屏幕的顶部。 (如你所见,iOS状态栏实际上是单页应用程序中ContentPage的一部分。)
ContentPage类定义了一个名为Content的属性,您可以将其设置为页面的内容。一般来说,这个内容是一个布局,而这个布局又包含了一堆视图,在这种情况下,它被设置为一个StackLayout,这个StackLayout把它的孩子排列在一个堆栈中。
这个StackLayout只有一个孩子,这是一个标签。 Label类派生自View,用于Xamarin.Forms应用程序显示一段文本。本章后面将更详细地讨论VerticalOptions和HorizontalTextAlignment属性。
对于您自己的单页Xamarin.Forms应用程序,您通常会定义从ContentPage派生的自己的类。 App类的构造函数然后将您定义的类的实例设置为其MainPage属性。 你会看到这是如何工作很快。
在Hello解决方案中,您还将看到一个用于创建PCL的AssemblyInfo.cs文件和一个包含程序所需的NuGet包的packages.config文件。 在“解决方案”列表中的“Hello”下面的“参考”部分中,至少会看到PCL需要的四个库。
.NET (displayed as .NET Portable Subset in Xamarin Studio)
Xamarin.Forms.Core
Xamarin.Forms.Xaml
Xamarin.Forms.Platfo
正如你正在编写一个Xamarin.Forms应用程序,这个PCL项目将会收到你的大部分注意力。 在某些情况下,这个项目中的代码可能需要针对各种平台进行一些裁剪,而且您很快会看到如何去做。 您还可以在五个应用程序项目中包含特定于平台的代码。
五个应用程序项目都有自己的图标和元数据形式的资产,如果您打算将应用程序推向市场,您必须特别注意这些资产。 但在您学习如何使用Xamarin.Forms开发应用程序的时候,通常可以忽略这些资产。 您可能会想要将这些应用程序项目折叠到解决方案列表中,因为您不需要对其内容进行太多打扰。
但是你真的应该知道这些应用程序项目是什么,所以让我们仔细看看。
在每个应用程序项目的References部分中,您将看到对常见PCL项目(本例中为Hello)的引用,以及各种.NET程序集,上面列出的Xamarin.Forms集合以及适用于其他Xamarin.Forms集合 每个平台。
Xamarin.Forms.Platform.Android
Xamarin.Forms.Platform.iOS
Xamarin.Forms.Platform.UAP (not explicitly displayed in the UWP project)
Xamarin.Forms.Platform.WinRT
Xamarin.Forms.Platform.WinRT.Tablet
Xamarin.Forms.Platform.WinRT.Phone
这些库中的每一个都在Xamarin.Forms命名空间中定义了一个静态Forms.Init方法,该方法初始化该特定平台的Xamarin.Forms系统。 每个平台的启动代码都必须调用这个方法。
您也刚刚看到PCL项目派生出一个名为App的公共类,它来自Application。 每个平台的启动代码也必须实例化这个App类。
如果您熟悉iOS,Android或Windows Phone开发,您可能会好奇地看到平台启动代码如何处理这些作业。