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