Windows8从消费者预览版到RTM版的发布让微软成了2012年最受关注的公司,同时这也引起了很多的开发者的兴趣,今天本文将介绍windows 8 开发环境的搭建以及Windows 8 下的第一个程序 HelloWorld。
---------------------------------华丽的分割线-----------------------------------------
一、Windows 8 开发环境的搭建
Windows 8 的开发需要一台装有Windows 8 的机器,以及visual studio 2012
这里我下的是window 8 rtm 企业版 以及visual studio 2012 旗舰版 因为我是学生开发者所以我是在官方网站下的,这里给出我度娘出的结果
Windows 8 专业版32位 http://kuai.xunlei.com/d/BLDJTTBZXIBV
Windows 8 专业版64位 http://kuai.xunlei.com/d/VURJIOVUVELH
Visual Studio 2012 专业版 http://www.iplaysoft.com/vs2012.html
二、HelloWord创建
a.先给出Window 8 的截图
b、在起始页选项卡中,选择新建项目来创建HelloWorld,也可以从文件菜单->新建->项目来创建。
如下图,模版选择Visual C# Windows 应用商店应用,右边选择(XAML),然后在下面输入项目名称,路径和解决方案名称,最后点击确定,就创建好了一个最简单的Metro App。
c.然后我们就看到了最熟悉的vs的界面
e.右侧我们看到工程的组织文件
从上图中,可以看到有如下文件和目录:
1)Properties
2)引用
3)Assets
4)Common
5)App.xaml
6)MainPage.xaml
7)Package.appemanifest
1)Properties目录下的文件Assembly.cs主要存放有关程序集的常规信息和程序的版本信息
2)引用,从上面的图中,我们看到默认有两个引用:.NET for Metro style apps和Windows
Metro 应用使用简装版的.NET框架库。我们可以双击Reference查看看到他们对应的命名空间。
3)Assets,该目录下主要存放程序使用到的Logo,启动画面等信息。
4)Common里面有一个文件:
StandardStyles.xaml,它是一个资源文件,它与App.xaml文件进行关联的。其中包含了一些Style和Template,通过这个文件,我们创建应用会变得更容易。
下面我分别摘取了一个Style和Template。
这是定义的style
- <Style x:Key="BasicRichTextStyle" TargetType="RichTextBlock">
- <Setter Property="Foreground" Value="{StaticResource ApplicationForegroundThemeBrush}"/>
- <Setter Property="FontSize" Value="{StaticResource ControlContentThemeFontSize}"/>
- <Setter Property="FontFamily" Value="{StaticResource ContentControlThemeFontFamily}"/>
- <Setter Property="TextTrimming" Value="WordEllipsis"/>
- <Setter Property="TextWrapping" Value="Wrap"/>
- <Setter Property="Typography.StylisticSet20" Value="True"/>
- <Setter Property="Typography.DiscretionaryLigatures" Value="True"/>
- <Setter Property="Typography.CaseSensitiveForms" Value="True"/>
- </Style>
这是定义的数据显示的模版
- <DataTemplate x:Key="Standard130ItemTemplate">
- <Grid Height="110" Margin="6">
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="Auto"/>
- <ColumnDefinition Width="*"/>
- </Grid.ColumnDefinitions>
- <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Width="110" Height="110">
- <Image Source="{Binding Image}" Stretch="UniformToFill"/>
- </Border>
- <StackPanel Grid.Column="1" VerticalAlignment="Top" Margin="10,0,0,0">
- <TextBlock Text="{Binding Title}" Style="{StaticResource TitleTextStyle}" TextWrapping="NoWrap"/>
- <TextBlock Text="{Binding Subtitle}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap"/>
- <TextBlock Text="{Binding Description}" Style="{StaticResource BodyTextStyle}" MaxHeight="60"/>
- </StackPanel>
- </Grid>
- </DataTemplate>
5)App.axml
App.xaml 文件和它对应的代码文件是 App.xaml.cs,用于启动 Metro App。这个 XAML 文件的主要用途是与 Common 文件夹中的StandardStyles.xaml进行关联。如下代码所示
- <Application
- x:Class="App.App"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:local="using:App">
- <Application.Resources>
- <ResourceDictionary>
- <ResourceDictionary.MergedDictionaries>
- <!--
- 用于定义平台外观的共同方面的样式
- Visual Studio 项目和项模板所必需的
- -->
- <ResourceDictionary Source="Common/StandardStyles.xaml"/>
注意这里
<ResourceDictionary Source="Common/StandardStyles.xaml"/>
这一句将Common文件夹下的StandardStyles.xaml注册到App.xaml 中一边其他成员可以使用定义的样式 以及数据显示的模版
对应App.xaml 有一个App.xaml.cs
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using Windows.ApplicationModel;
- using Windows.ApplicationModel.Activation;
- 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;
- // “空白应用程序”模板在 http://go.microsoft.com/fwlink/?LinkId=234227 上有介绍
- namespace App
- {
- /// <summary>
- /// 提供特定于应用程序的行为,以补充默认的应用程序类。
- /// </summary>
- sealed partial class App : Application
- {
- /// <summary>
- /// 初始化单一实例应用程序对象。这是执行的创作代码的第一行,
- /// 逻辑上等同于 main() 或 WinMain()。
- /// </summary>
- public App()
- {
- this.InitializeComponent();
- this.Suspending += OnSuspending;
- }
- /// <summary>
- /// 在应用程序由最终用户正常启动时进行调用。
- /// 当启动应用程序以执行打开特定的文件或显示搜索结果等操作时
- /// 将使用其他入口点。
- /// </summary>
- /// <param name="args">有关启动请求和过程的详细信息。</param>
- 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();
- }
- /// <summary>
- /// 在将要挂起应用程序执行时调用。在不知道应用程序
- /// 将被终止还是恢复的情况下保存应用程序状态,
- /// 并让内存内容保持不变。
- /// </summary>
- /// <param name="sender">挂起的请求的源。</param>
- /// <param name="e">有关挂起的请求的详细信息。</param>
- private void OnSuspending(object sender, SuspendingEventArgs e)
- {
- var deferral = e.SuspendingOperation.GetDeferral();
- //TODO: 保存应用程序状态并停止任何后台活动
- deferral.Complete();
- }
- }
- }
在上面的代码中,有三个方法
public App()
该方法用于初始化一个应用程序,我们所写的代码,这里是首先被执行的,逻辑上等价于main() 或WinMain()。
protected override void OnLaunched(LaunchActivatedEventArgs args)
当用户正常情况下启动完毕了程序,该方法会被调用。当然,也有其它情况下,该方法会被调用,例如:当启动程序以打开指定的文件,或者显示搜索结果,等等。
private void OnSuspending(object sender, SuspendingEventArgs e)
当程序被中止时,该方法会被调用。
应用程序的生命周期主要就是通过App.xaml.cs文件进行处理的,关于Metro App的生命周期,在后面的学习中,我会进行介绍。现在你只需要知道OnLanunched方法是在程序启动的时候被调用的。在该方法中,会创建并加载MainPage的一个实例,作为应用程序的主入口。
6.MainPage.xaml 是用来定义我们运行时,看到的界面,这是默认生成的,当然我们可以自己定义开始的导航界面。
- <Page
- x:Class="App.MainPage"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:local="using:App"
- 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>
这是我第一次接触到XAML,但是个人觉得只要有地XML或者HTML经验的人看XAML的时候应该是没什么大问题
在这里MainPage.xaml就是在包含了一个Grid的控件
当然这里的MainPage.xaml也包含一个隐藏的文件MainPage.xaml.cs
- 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 App
- {
- public sealed partial class MainPage : Page
- {
- public MainPage()
- {
- this.InitializeComponent();
- }
- protected override void OnNavigatedTo(NavigationEventArgs e)
- {
- }
- }
- }
这里MainPage()是用来初始化用的,OnNavigatedTo方法则是当该页面显示在某个位置的时候,会被调用。
7)Package.appemanifest
最后我们来看看文件Package.appemanifest 。
这是一个提供Metro App信息给Windows runtime的XML文件。信息主要包括:程序显示名称、入口点、支持的旋转、徽标等。
三、运行 和 调试
1、如图我利用了visual studio 2012提供的界面设计工具 给空白页上添加了一个TextBlock控件并添加上文字,这样就算给这个HelloWorld程序设计好了界面(PS:虽然很丑)
点击下面的按钮
这样我们就成功地完成了世界上“最伟大”的程序