WPF程序设计 :第一章 应用程序和窗口(The Application and the Window)
The Application and the Window
Part One 应用程序和窗口
1. 注意的是,我们这里直接书写C#代码(console程序),即文字模式编写程序。当然你现在完全可以借助Visual Studio 2008 IDE编写,更加快速,初学者,建议你使用前者学习WPF 应用程序开发。
对于当前一些学习者来说,肯能还在使用Vs 2005,那么你可以这样创建应用程序:
1. "File"菜单,选取"New Project";
2.在"New Project" 对话框中,选取"Visual C#" - "Windows" - "Empty Project"(空项目)。指定存放目录和工程名后,(取消“Create Directory For
Solution”),然后按下"OK".
这样就可以创建一个空的Project了。
2. 为Windows Presentation Foundation(WPF)开发应用程序,需要构建Application对象和Window对象。下面就是一个简单的WPF程序:
// SayHello.cs (c) 2008 by Jack Dong
//-----------------------------------------
using System;
using System.Windows;
namespace JackDong.SayHello
{
class SayHello
{
[STAThread] // 指示应用程序的 COM 线程模型是单线程单元(STA)
public static void Main()
{
Window win = new Window();
win.Title = "SayHello";
win.Show();
Application app = new Application();
app.Run();
}
}
}
(1)利用using编译指示符(directive)将System.Windows命名空间加入工程,这个命名空间包含了所有的基本WPF类别、结构(struct)、接口(interface)、委托(delegate)以及枚举类型(enum),其中包括Application和Windows两个类。
(2)其他的WPF命名空间均以System.Window开头
如:System.Windows.Controls、System.Windows.Input、System.Windows.Media。只有System.Windows.Forms是个例外,他主要是Windows.Forms的命名空间。
(3)除了System.Windows.Forms.Integration这个命名空间里的类是用来集成Windows.Forms 和 WPF 程序的,其他所有以 System.Windows
.Forms 和 WPF程序的,其他所有以System.Windows.Forms 开头的命名空间,都属于传统的Windows.Forms命名空间。
(4)通过上面方式创建的Project,你需要在"Solution Explorer" 中,"References"栏必须包含"PresentationCore"、"PresentationFramework"、"System"
以及"WindowsBase"。
运行上面的代码,Main 一开始创建一个Window类的对象,这个类用来创建标准应用程序窗口。Title property 是显示在窗口标题栏的文字,而Show方法将窗口显示在屏幕上。
这里最重要的步骤是,调用Application对象的Run方法。在传统的Windows编程的思维中,这么做的目的是建立一个消息循环,让应用程序可以接受用户键盘或是鼠标输入。
在关闭SayHello创建的窗口时,你会发现一个console窗口也在运行。这是源自编译选项的设定,你可以在工程的property中,修改此编译选项。用鼠标点击工程名,并从弹出菜单中选择“Property”。现在你就可以查看工程的各种设定了,当然也可以改变设定。特别注意的就是"Output Type"(输出类型)被设定为"Console Application"(控制台应用程序),显然,这样的设定不会阻碍用console程序来建立GUI窗口。将这个设为"Windows Application",程序同样会顺利执行,而这次将不再出现console的窗口了。我认为在开发阶段,console窗口其实相当有用。程序运行时,我们可以用它来显示一些文本信息,以便调试。如果程序的BUG太多,设置无法将GUI窗口显示出来,或是进入无限循环,这个时候,只要在console窗口键入Ctrl+C,就可以轻易地关闭程序。这些都是console窗口的附带好处。
3. 在一个程序中,只能创建一个Application对象,对程序的其他地方来说,此Application对象的作用如同固定的锚一般。你在屏幕上是看不到Application对象的,但是可以看到Window对象。Window对象出现在屏幕上,这些是正常的Windows系统窗口,具有的标题属性(Titile property)的值会变成标题栏上的文字,系统菜单在标题栏的左边,最大化、最小化和关闭窗口图标则在右边。
此窗口有一个可以调整窗口大小的边框,窗口中很大的面积被一个客户区(client area)所占据。
需要注意的是,Run的调用必须保留在最后。Run方法一旦被调用,就不会返回,知道窗口被关闭为止。Run返回后,Main方法就借宿,Windows操作系统会做一些清除工作;程序调用Run方法之后,才真正开始运行,因为只有调用Run之后,Window对象才能响应用户的输入。当用户关闭窗口时,Run方法就会返回,程序也就准备结束。
这样程序运行时几乎所有的时间都花在Run内,在初始化之后,其实程序所作的事情几乎都是在响应各种事件,他们通常是关于鼠标、键盘等的事件。
1. MouseDown事件,
(1)事件处理器
须符合MouseButtonEventHandler委托,也就是说,第一个参数类型是object,第二个类型是MouseButtonEventArgs,给类定义在System.Windows.Input命名空间中。
(2)使用
当客户在窗口的客户区中按下鼠标,该事件就会发生