WPF专业编程指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 WPF应用程序的创建

在Windows操作系统中,所有的应用程序都在自己独立的进程中运行,WPF也不例外。每个进程都有自己独立的内存地址,进程间的数据是隔离的,进程之间不会相互影响。当应用程序创建进程时,同时创建一个或多个线程。线程在自己的进程空间中运行,在底层,WPF仍然使用Windows的消息驱动机制来实现事务处理。

创建WPF应用程序从创建Application类开始。WPF的主要功能是人机交互,我们可以把当代人机界面(UI)程序归为两大类:一类是桌面(desktop)应用程序;一类是互联网(Web)应用程序。WPF首次实现了对这两类应用程序的统一编程。

让我们来创建一个简单的WPF程序:

  using System;
  using System.Windows;
  namespace Yingbao.Chapter1
  {
    public class HelloWPF
    {
      [STAThread]
      public static void Main()
      {
          Window win = new Window();
          win.Title = "WPF application";
          win.Content = "Hello WPF!";
          win.Show();
          Application app = new Application();
          app.Run();
      }
    }
  }

首先,用Yingbao.Chapter1声明命名空间,并将在本书的所有例程中使用这一惯例。第1章的例程在Yingbao.Chapter1的命名空间中,第2章的例程将在Yingbao. Chapter2的命名空间中等。

然后,引入了.NET中的两个命名空间: System和System.Windows。 System命名空间提供.NET的基本服务,System.Windows中含有WPF的基本服务。Microsoft把WPF所用的类,都放在System.Windows的命名空间或其下面的命名空间中,如System.Windows.Controls、System.Windows.Input,等等。在Visual Studio的项目下,引入相应的Assembly, 这样就可以使用这些命名空间中的类了。

Main函数是WPF程序的入口点,它必须是静态(static)的。所有WPF程序,都必须在单一线程公寓(STA)模型中运行。STA来源于COM,若对此概念不熟悉,可以参考COM的相关著作或文章。在Main函数前加上STAThread属性,就是满足WPF的这一要求,即UI不能在多线程的环境中运行。

在这个程序里,创建了一个Window类实例; Window类是管理WPF桌面应用程序的窗口类。其Title属性就是窗口标题,而Content属性是窗口中所要显示的内容。和.NET 1.0中的Form显示窗口一样,需要调用Show()方法,最后创建了Application类实例,并调用其Run() 方法。Run() 方法创建了和Win32一样的消息分配机制,它会接收操作系统发给应用程序的消息,并对相关消息进行响应。这个程序的运行结果如图1-1所示。

图1-1 Hello WPF!

你也可以不用调用Window类中的Show方法,而使用更为简洁的形式:

  app.Run(win);

在这种情况下,Run方法将会自动调用win.Show()。