Windows 8 Metro 应用开发入门(一):开发环境介绍
Windows8已经发布,随之而来的基于WinRT的Metro应用也正向我们走来,正像它所宣传的:光滑、快、现代。看习惯了玻璃、立体风格的应用,或许Metro的简洁能给你留下不一样的体验。Visual Studio 2012为Metro应用提供了强有力的开发支持。磨刀不误砍柴工!这一章我们先来介绍一下开发环境的搭建及可能遇到的问题,最后再来一个简单的应用体验一下Metro的开发。
Windows8不但支持传统的桌面应用,并且推出一个专为触摸而设计的最新Metro风格应用,对于Metro应用必须要求在Visual Studio 2012下开发,随之一起发布的是.NET Framework 4.5。所以,为了开发及调试方便,我们推荐的开发环境是:Windows8 + Visual Studio 2012。
Metro支持三种开发模式:
如果你有Web前台开发功底,你可以选择HTML5+CSS3+JavaScript进行开发;
如果你熟悉Silverlight或WPF开发,可以选择XAML+C#/VB.NET/C++进行开发;
如果你比较关注渲染性能,当然可以选择C++和DirectX进行开发。
本入门系列会以XAML+C#为基于进行演示,当然在后文中也可能会进行其他另两个开发模型的演示。在安装Visual Studio 2012过程中,可以选择安装相应版本的Blend For Visual Studio为XAML提供可视化设计,不过我个人的习惯是在VS中手写XAML,毕竟VS中也提供了对XAML的智能感知,在调色或动画部分会借助Blend进行辅助工作。
我的测试开发环境是部署在虚拟机中,如果你还没有安装Windows8和Visual Studio 2012,可以去微软网站上下载相应的预览及试用版。至于安装,这里就不再演示了,提醒一下,在安装Windows8时,一定要创建一个新用户,另外还要提前注册一个Windows Live ID,现在已被更名为Microsoft 帐户。正确安装,启动后,可以看到如下两个分别是VS2012和Blend的界面,怎么样?有没有Metro的感觉?


在新建项目中是以Windows应用商店表示Metro应用,选择Windows应用商店项目类型,默认是.NET Framework 4.5版本。
在首次创建Windows应用商店项目时候,VS会要求你先获取Windows8应用开发许可证,现在这个许可证可用期限是一个月,以后不知道会不会收费。
选择某一项目类型后,点击“确定”按钮,在创建过程中,会弹出如下询问:

很明显,义无反顾地选择“我同意”,接着是连接许可证服务器,然后是要求输入可用的Microsoft账户信息:

输入完了之后,点击“登录”,如果账户可用,正常情况下会提示获取许可证成功,如下:

我是2012年9月12日获取的,许可证到期日期是2012年10月12日。到此一系列的身份认证表示你已经得到创建Windows8 Metro应用的许可,点击“关闭”按钮,接着才是真正的创建项目。以后再创建Windows商店项目就不会再弹出这些获取许可证消息的窗口了,当然要看微软对许可证策略。如果你是以Administrator登录,还有麻烦,在VS中打开xaml文件设计器时可能会收到如下设计器异常:

明确指出了不能用内置管理员激活此应用,如果你是很固执地尝试调试程序,可能会收到以下异常:

所以,同志,请切换到其他系统账户吧,这就是在上一节中提到的,在安装Windows8时一定要创建一个新用户,以这个新用户登录Windows然后是进行Metro应用开发。
在Windows8商店项目类型中有几个模板,如下:

创建任何一个模板的应用,都会默认创建几个必要的文件夹及目录,如下图是创建空白应用程序模板的项目:

Assets 文件夹,放置图片等资源文件,默认里面有四个与Windows商店应用程序相关的必须的图片,也可以将自己的资源文件放进去。
Common 文件夹,默认里面有一个样式文件StandardStyles.xaml,是Windows商店应用程序的基础样式,强烈建议不要修改它,因为它与一些控件有关联,如果有自己的样式,可以在这里新建一个自己的样式,然后在App.xaml 里做引用即可。
App.xaml/App.xaml.cs 熟悉Silverlight开发的都知道这个是应用程序的初始入点。App.xaml里仅仅有一个对标准样式的引用:
<ResourceDictionary Source="Common/StandardStyles.xaml"/>
App类与Silverlight里的App类相似,这里有一个重要的方法:

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame == null)
{
rootFrame = new Frame();
if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: 从之前挂起的应用程序加载状态
}
Window.Current.Content = rootFrame;
}
if (rootFrame.Content == null)
{
if (!rootFrame.Navigate(typeof(MainPage), args.Arguments))
{
throw new Exception("Failed to create initial page");
}
}
Window.Current.Activate();
}

应用程序启动时会进入这个方法,然后导航到第一个主页面,Frame的Navigate方法很有意思,它只是接收一个目标页的类型,在其内部创建目标页的实例进而加载可视。这里还会涉及到程序挂起、恢复等,建议参考应用程序生命周期的相关资料。
AppXXX_TemporaryKey.pfx 应用程序签名证书
Package.appxmanifest 应用程序配置相关,比如Logo、应用程序名等,如果你的程序将来要提交到Windows商店,可得好好配置一下这里面的东西,在VS中可以双击打开它进行可视化编辑,也可以用记事本打开它进行编辑,其实它就是一个XML文档。
以上是项目的基础配置,对于Windows商店项目有几个模板可供选择。
(1) 空白应用程序(XAML) 创建没有预定义的控件或布局的Windows应用商店应用程序的单页项目,该模板会创建一个空的主页面MainPage.xaml,如下:

<Page
x:Class="App1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App1"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> </Grid>
</Page>

是一个空的页面,可以在其Grid里放置总局及控件。这一模板是最基础的模板,我们可以根据需要自定义各种各样的页面。
(2) 网络应用程序(XAML)创建在以网格形式排列的分组项之间导航的Windows商店应用程序的三页项目,专用页将显示组合项的详细信息。如下图分别对应:GroupedItemsPage,GroupDetailPage和ItemDetailPage页,这些页都已经有相应的总局元素。

基于组、项、详细的导航可以加快我们的开发速度,当然如果这些页达不到我们项目的要求,也可以自定义其他页面布局。此模板的项目会在Common文件夹下创建几个支持导航和消息通知等类,并且在DataModel文件夹下创建一个示例数据源SampleDataSource。
(3) 拆分布局应用程序(XAML)在已分组的项之间导航的Windows商店应用程序的两页项目,如下图分别表示组页ItemsPage,和项及选择列表项页SplitPage:


如果你的应用程序有类似主-从(包含列表项)展现应用,这个模板非常适合。
(4) 类库项目(Windows应用商店应用程序)这个基于Metro应用的托管项目,这个项目大家都很熟悉了,里面通常就是放一些Class。
(5) 还有两个Windows运行时组件和单元测试项目模板就不再介绍了,有需要可以参考相关资料。
在每个项目中可以添加对应的项:空白页BlankPage、基本页BasicPage、拆分页SplitPage、项页ItemsPage、项详细信息页ItemDetailPage、分组项页GroupedItemPage、组详细信息页GroupDetailPage、资源字典Dictionary、模板化控制CustomControl、用户控件MyUserControl、文件打开选取器协定FileOpenPickerPage、搜索协定SearchResultsPage、共享目标协定ShareTargetPage。
接下来我们创建一个经典的HelloWorld项目。首先我们创建一个空的HelloWorld项目,如下:

编辑主页面MainPage,放置一个TextBox和一个Button,当我们点击按钮时,弹出对话框,来显示用户输入和其他字符。编辑完成的MainPage页如下:

<Page
x:Class="HelloWorld.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:HelloWorld"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<StackPanel Orientation="Horizontal" Height="100" HorizontalAlignment="Center" Margin="0,120,0,0" VerticalAlignment="Top">
<TextBox x:Name="tbInput" TextWrapping="Wrap" Text="" Width="380" Height="60" FontSize="26" />
<Button x:Name="btnOK" Content="确定" Width="100" Height="64" Click="btnOK_Click_1" FontSize="22"/>
</StackPanel>
</Grid>
</Page>

确定按钮事件如下:
private void btnOK_Click_1(object sender, RoutedEventArgs e)
{
string msg = string.Format("You say: {0}.", this.tbInput.Text);
MessageDialog dialg = new MessageDialog(msg, "Hello world");
dialg.ShowAsync();
}
调试Metro项目有三种方式:模拟器、本发计算机和远程计算机。对于模拟器运行效果如下:

模拟器模式下是一个单独的窗体,所以对于调试比较方便,但是对于本地计算机模式下调试,由于是全屏幕且在Metro风格下运行,所以调试比较不方便,通常当运行起来后,有三种方式可以切换:
(1) 可以使用快捷键Alt+F4退出当前程序;
(2) 将鼠标移动屏幕左上角位置,然后在左上角会出现其他程序界面的缩略图,点击即可切换;
(3) Alt+Tab进行切换。
如果在代码窗口中有断点,在程序运行到断点位置会自动切换到VS代码窗口的断点命中位置。
Windows 8 Metro 应用开发入门(一):开发环境介绍的更多相关文章
- Office 365开发概述及生态环境介绍(二)
本文于2017年3月19日首发于LinkedIn,原文链接在这里 在上一篇 文章,我给大家回顾了Office发展过来的一些主要的版本(XP,2003,2007,2013等),以及在Office客户端中 ...
- [嵌入式开发入门]4412开发板从零建立Linux最小系统
本文转自iTOP-4412开发板实战教程书籍 http://www.topeetboard.com iTOP-4412开发板不仅可以运行Android,还可以运行简单的Linux最小文件系统. 最小L ...
- Office 365开发概述及生态环境介绍(一)
原文于2017年3月13日首发于LinkedIn,请参考这个链接 离上一篇文章,很快又过去了两星期的时间.今天抓紧晚上的时间,开始了Office 365开发系列文章的第一篇,我会帮助大家回顾一下过去O ...
- UWP开发入门(十一)——Attached Property的简单应用
UWP中的Attached Property即附加属性,在实际开发中是很常见的,比如Grid.Row: <Grid Background="{ThemeResource Applica ...
- 【转载】Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门
Servlet Filter(过滤器).Filter是如何实现拦截的.Filter开发入门 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过F ...
- Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门
Servlet Filter(过滤器).Filter是如何实现拦截的.Filter开发入门 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过F ...
- Kinect for Windows SDK开发入门(一):开发环境配置
[译]Kinect for Windows SDK开发入门(一):开发环境配置 前几天无意中看到微软发布了Kinect for windows sensor,进去看了一下Kinect应用的例子,发现K ...
- Kinect for Windows SDK开发入门(15):进阶指引 下
Kinect for Windows SDK开发入门(十五):进阶指引 下 上一篇文章介绍了Kinect for Windows SDK进阶开发需要了解的一些内容,包括影像处理Coding4Fun K ...
- windows 8 metro 开发学习资源链接
原文 http://www.cnblogs.com/icuit/archive/2012/05/30/2525979.html windows8 metro开发资源目前还是以MSDN为主,做了一个li ...
- Windows驱动开发入门指引
1. 前言 因工作上项目的需要,笔者需要做驱动相关的开发,之前并没有接触过相关的知识,折腾一段时间下来,功能如需实现了,也积累了一些经验和看法,所以在此做番总结. 对于驱动开发的开发指引,微软 ...
随机推荐
- 20165333实验一 JAVA开发环境的熟悉
JAVA开发环境的熟悉-1 1建立"自己学号exp1"的目录 2 在"自己学号exp1"目录下建立src,bin等目录 3 javac,java的执行在&quo ...
- Pg168—2题 修改
package org.hanqi.pn0120; public class JuXing { JuXing(double chang,double kuan) { this.chang=chang; ...
- day1作业二:多级菜单操作
作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 思路: (1)首先定义好三级菜单字典: (2)提 ...
- JS 如何准确获取当前页面URL网址信息
在WEB开发中,时常会用到javascript来获取当前页面的url网址信息,在这里是一些获取url信息的小总结. 下面我们举例一个URL,然后获得它的各个组成部分:http://i.cnblogs. ...
- codeforces Educational Codeforces Round 9 E - Thief in a Shop
E - Thief in a Shop 题目大意:给你n ( n <= 1000)个物品每个物品的价值为ai (ai <= 1000),你只能恰好取k个物品,问你能组成哪些价值. 思路:我 ...
- 使用 AVA 做自动化测试
http://colabug.com/710736.html
- Mybatis框架简单使用
Mybatis框架简单使用 环境搭建 新建一个JavaWeb项目,在web\WEB-INF\创建lib文件,并且在其下添加Mybatis的核心包以及依赖包,以及Mysql驱动包,junit4测试包等. ...
- socket--多进程,多线程服务器
一:概念: 我们知道IP地址是标志网络中不用主机的IP地址,而端口号就是同一台主机上标志不同进程的地址,IP地址和端口号标志网络中的唯一地址.(又称socket) 在TCP协议中,建⽴立连接的两个进程 ...
- android 视频
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 第一套完整版: 第二套完整版: 第三套完整版: 第四套完整版: 第五套完整版: ==== ...
- 数据准备<4>:变量筛选-理论篇
在上一篇文章<数据准备<3>:数据预处理>中,我们提到降维主要包括两种方式:基于特征选择的降维和基于维度转换的降维,其中基于特征选择的降维通俗的讲就是特征筛选或者变量筛选,是指 ...