第二章 WPF应用程序开发
Windows Presentation Foundation (WPF) 支持创建下列类型的应用程序:
1、独立应用程序(传统风格的
Windows 应用程序,以可执行程序集的形式生成,安装在客户端计算机上并从客户端计算机上运行)。
2、XAML 浏览器应用程序
(XBAP)(由可导航页面构成的应用程序,这些页面以可执行程序集的形式生成,并通过 Windows Internet Explorer 进行浏览和承载)。
3、用户控件和自定义控件库(包含可重用控件的不可执行程序集)。
4、类库(包含可重用类的不可执行程序集)。
本章将从以下几个方面讨论WPF应用程序的开发:
1、WPF应用程序核心-Application类
2、用WPF开发标准的Windows应用程序
3、基于导航的WPF应用程序
4、WPF应用程序生成和部署
5、WPF的Pack URI参考
第一节. WPF应用程序核心-Application类
一个Windows应用程序必须有一个应用程序入口点-Main函数,大家都知道,在Windows Forms开发里面有一个Program.cs文件,我们可以在那里写Main函数:
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void
Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
而Windows Presentation
Foundation下开发的应用程序入口函数Main在哪里写呢?答案是在Application的派生的类中。
public class myApp:Application
{
[STAThread]
public static void Main()
{
Application app = new
Application();
MainWindow window = new
MainWindow();
window.Show();
app.Run();
}
}
注意STAThreadAttribute
属性被应用于 Main 方法以指示 WPF 应用程序的主 UI 线程是一个 STA 线程,此线程是 WPF 应用程序所必需的。如果我们将app.Run方法去掉会发生什么问题呢?结果是MainWindow实例窗体显示之后立即消失,这是为什么呢?因为WPF内部必须要让应用程序不停地从操作系统分配消息给MainWindow,直到关闭位置,而完成这个任务的就是System,.Windows.Application类,所以我们必须生成Application实例,并调用其Run方法,是用用程序保持一致运行,分配适当的消息。
在上面代码中我们以申明实例化主窗体并以Show方法调用的方式来显示主窗体,同时在WPF中我们可以以下面代码形式来实例化并显示主窗体,其中间如何实例化过程由WPF框架内部实现。
public class myApp:Application
{
[STAThread]
public static void Main()
{
Application app = new
Application();
app.StartupUri
= new System.Uri("MainWindow.xaml", System.UriKind.Relative);
app.Run();
}
}
下面我们来看看Visual Studio
2008怎么样来处理这些过程的。进入Visual Studio 2008 开发环境,文件>新建>项目:WPF应用程序
图 2-1
Visual Studio 2008为我们缺省生成了如下图2-2文件

首先我们发现Visual Studio 2008环境为我们直接引用了PresentationCore和PresentationFramework
两个WPF核心组件,这是WPF应用程序必须的引用。另外同步生成App.xaml和App.xaml.cs文件以及Window1.xaml和Window1.xaml.cs文件,为什么会生成两组四个文件?未来弄清楚这个我们首先来分析这两组文件。
打开App.xaml如下
<Application x:Class="ExpamleCode_002.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.co