本篇为《Programming Windows, 6th Edition》译文,本人将一些琐碎之事写在译文之前,没看过的还请劳驾看一下写在《Programming Windows,6th Edition》译文之前
从Brian Kernighan和Dennis Ritchie出版的经典书籍《C语言》开始,用Hello World给初学者作为开始的代码已经变成了一种习惯,让我们给Windows8这个新世界创造一个类似的程序。
我假设你已经安装了带有开发工具和SDK的Windows8预览版,特别指出,在本书中,我将用Visual Studio指代Microsoft Visual Studio Express 2012 RC for Windows8。
从Windows 8的开始屏幕启动VS,让我们开始写代码吧。
第一个项目
在VS打开的屏幕中,开始标签应该已经被选中。在左边你将看见一个“建立新项目”的选项。点击它,或者是从文件菜单选择“建立新项目”。
建立新项目的对话框弹出时,在左边面板中选择Visual C#,然后选择新建Windows 8项目,从中间区域选择空白应用。在对话框的底部为项目起个名字:Hello。让解决方案名字和这个一样。用浏览按钮选择这个程序在本地储存的位置,然后单击确定。(提及Visual Studio的时候我一般会将使用鼠标叫做click,而在这个应用中我会使用一个触摸术语tap--轻触。专为触摸优化的Visual Studio版本可能要几年后才会出现)
Visual Studio创建了一个叫做Hello的解决方案,在解决方案中有一个项目叫做Hello,在这个项目中还有一堆文件。这些文件在Visual Studio屏幕的右边的解决方案浏览器中被一一列出。每个Visual Studio的解决方案至少有一个项目,一个解决方案可能包括另外的应用项目和库。
在这个项目的文件列表中包含一个叫做MainPage.xaml的文件,如果你点击挨着文件的小箭头,你将在它的下面看到一个叫做MainPage.xaml.cs的文件。
你可以通过双击或者是右键打开,看一看这两个文件。
MainPage.xaml和MainPage.xaml.cs文件在解决方案浏览器是联系在一起的,因为他们都是为了定义一个叫做MainPage的类。像Hello这种简单的程序,这个MainPage类定义了这个应用所有可视的用户界面。
MainPage.xaml.cs有一个.cs的后缀代表了C#。抛开注释,MainPage.xaml.cs.文件应该包含了如下C#代码:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
namespace Hello
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
}
}
所有你预先需要的命名空间,都要通过using指令,引入这个文件。你会发现大多数的MainPage.xaml.cs文件不需要所有的这些命名空间,还有很多其他的MainPage.xaml.cs需要一些另外的命名空间。
这些命名空间通过第一个关键字可以分成两类:
System.* 新Windows 8应用的.net框架
Windows.* Windows运行时(WinRT)
根据Using指令的列表,以Windows.UI.Xaml开头的命名空间在Windows运行时中扮演了一个重要的角色。
接下来,这个MainPage.xaml.cs文件定义了一个叫Hello的命名空间(和项目名称一样)和一个叫做MainPage类,这个类继承了Page类。Page类是Windows运行时的一部分。
Windows8 API的文档是通过命名空间来编写的,因此如果你想找Page类的文档,了解它被定义的命名空间是非常有用的。让我们把鼠标停在MainPage.xaml.cs源代码的Page上,你就会发现Page是在Windows.UI.Xaml.Controls命名空间中。
MainPage类的构造函数中有一个InitializeComponent方法(这个我将会稍后说一下),这个类还包含一个重写方法OnNavigatedTo。Windows 8应用总会有一个类似于网站的页面导航结构。因此他们总是包含多个继承了Page的类。为了实现导航的目的,Page类定义了一些虚方法:OnNavigatingFrom,OnNavigatedFrom,还有OnNavigatedTo。这个OnNavigatedTo重写方法是当页面变为活动页面时进行初始化的好地方。但是这都是为以后打算的,在本书的早期的章节中大多数程序都只有一个页面。我将更多的提到一个应用的页面(Page)而不是窗口(Window),在应用下面仍然有一个窗口(Window),但是它并没有Page那么重要。
注意在MainPage类的定义中有一个partial关键字。这个关键字意味着,这个类的定义是有其他部分在另外的C#源代码文件的。正如你看到的,确实是这样。然而从概念上说,MainPage类另外的部分并不是在另一个C#代码中,而是在MainPage.xaml文件:
<Page
x:Class="Hello.MainPage"
IsTabStop="false"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Hello"
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>