Compartilhar via


构建Windows通用应用程序

什么是通用应用程序

Windows通用应用程序(Universal Windows Apps,简称UWA)Universal Windows Apps它包括了一个开发者为Windows开发软件的开发、设计、修改和在应用商店出售的一整套流程,它运行在windows Runtime上让开发者无需重复工作即可开发分别对应Windows、Windows Phone。

由于我们需要确保我们的用户在不同平台上能有更好的体验以及各平台功能的完整性,往往我们需要在各种平台上分别开发我们的应用。

UWA 还不能像梦想中一样,让我们一次实现到处运行(因为这可能本来就是个梦想),但是微软通过UWA让这一梦想更近了一步,据说在某些应用中共享代码能够达到90%。

windows 通用应用能够让我们快速开发出多终端的应用。
正如下图所示我们可以使用自己喜欢的语言模型来进行开发。 个人觉得C#是首选(毕竟是亲儿子嘛~)

WinRT(windows Runtime)

是 WinRT 使得开发者可以将APP构建在各种windows8.1的设备上的。在之前windows 8.0和windows phone 8.0共享代码是很困难的的。

而现在windows phone 8.1 和windows 8.1 使用了相同的开发栈。这意味着开发者可以在windows phone 8.1 和windows 8.1之间共享开发代码和UI。

关于Windows Phone Silverlight 8.1

随着新的winRT发布windows phone Silverlight 8.1也发布了,使得已有的windows phone 7/8的应用可以移植到windows 8.1上。 但是windows phone Silverlinght 8.1 的应用只能运行在windows phone 8.1上,如果开发者想要支持其他的设备必须单独建立windows 8.1的项目。也就是说开发者不能够重用自己应用中的大量应用代码以及UI,开发者不得不维护两个单独的版本。

Windows Phone Silvelight 8.1 与 WinRT 的区别

主要区别其实在于他们的开发栈。 windows phone 8.0 和 windows phone silvelight 8.1 使用了比较老的Silvelight Xaml stack,然而windows phone 8.1 和windows 8.1 使用了新的Windows Runtime stack

如何构建?

下面我就一步一步的带着大家一起做出第一个通用应用程序

1. 准备

你需要的只是一个Visual Studio 2013 with Update 2 或者是更高版本(下载链接:目前最新的版本是Visual Studio Ultimate 2013 with Update 3

2. 建立工程

1、 按照图1新建一个工程
图1:

2、 在“模板”-》“Visual C#” -》“应用商店应用”-》“通用应用程序” 下选择 “空白应用程序(通用应用程序)”如[图2]](#Image02)所示.
图2:

 3、 添加上自己的工程名,然后确定。出现如图3所示的结果
图3:

3. 一点点解释

解决方案中分别是

(1) Windows 应用商店项目: Windows 应用商店项目包含面向 Windows 的 XAML 页面和代码

(2) Windows Phone 项目:Windows Phone 项目包含面向 Windows Phone 的 XAML 页面和代码

(3) Shared:上面两个项目共享的代码和XAML页面。

图4:

4.开始写代码啦

1、 如图5所示右键 共享的工程(本文中是UniversalApp.shared)然后添加新建项

图5:  

2、 出现一个对话框如图6 然后添加一个类。

图6:  

3、 在新建的类中贴入如下代码

 using System; using System.Collections.Generic; using System.Text; namespace UniversalApp { class HelloWorld { public string GetHelloWorld() { #if WINDOWS_APP return "Hello World WINDOWS_APP"; #endif #if WINDOWS_PHONE_APP return "Hello World WINDOWS_PHONE_APP"; #endif } public string GetCurrentTime() { return DateTime.Now.ToString(); } } } 

4、效果如图7所示

图7:  

ps: 关于图7中问题的解释

 1、编写共享项目中的跨平台代码 在共享项目中,你通常要编写在两个平台上运行的代码。 要隔离特定于平台的代码部分,请使用 #ifdef 指令。已为你方便地预定义了常数 WINDOWS_APP 和WINDOWS_PHONE_APP。 你可以将文件从一个特定于平台的项目拖放到共享项目(反之亦然), 以更改代码的作用域。 
 2、标识并隔离特定于平台的代码 当你在共享项目中编写代码时,Visual Studio 代码编辑器使用面向两个平台之一 的上下文。 在C#中,在编写代码时看到的 Intellisense 特定于代码编辑器的上下文,即特定于  Windows 或Windows Phone。 以下屏幕截图显示 Visual Studio 代码编辑器中的上下文选择器下拉列表。用来 选择你当前使用的上下文。 

图8:   

图9:  

5、 再次添加代码
这次分别在UniversalApp.Windows 和UniversalApp.WindowsPhone工程下的 MainPage.xaml中添加如下代码(): 

  <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBlock x:Name="textBlock" Text="Hello" FontSize="20" /> <Button Click="Button_Click">Click Me</Button> </StackPanel> 

以及两个项目的MainPage.xaml.cs下添加如下代码

  private void Button_Click(object sender, RoutedEventArgs e) { HelloWorld hl = new HelloWorld(); textBlock.Text = hl.GetHelloWorld() + Environment.NewLine + hl.GetCurrentTime(); } 

5.终于可以运行代码了~

1、如下图所示选择你需要的运行方式
图10: 

2、 点击运行

3、 windows 以及windows phone 的运行结果分别如下:

图11:

图12:

6.可以参考的链接

视频:
https://channel9.msdn.com/Series/Windows-Phone-8-1-Development-for-Absolute-Beginners/Part-10-Exercise-Tip-Calculator-as-a-Universal-App

文章:

https://msdn.microsoft.com/zh-cn/library/windows/apps/dn609832.aspx
https://developer.telerik.com/products/need-know-windows-universal-apps/
https://blogs.msdn.com/b/eob/archive/2014/04/16/starting-with-universal-apps-on-visual-studio-2013.aspx
https://blog.galasoft.ch/posts/2014/04/about-windows-phone-8-1-and-universal-apps/
https://dev.windows.com/en-us/develop/building-universal-Windows-apps/

Comments