在本书第一部分展示的大部分程序,创建工程都是采用和上述步骤基本相同的方法,除了一些具有多个源代码文件的工程外(本章就有一个这样例子)。
当你关闭SayHello所创建的窗口时,你会发现有一个控制台窗口仍然在运行。这个控制台窗口的出现是受到工程中一个属性的控制的。右键单击工程名字选择“属性”菜单(或者在“工程”菜单中选择“属性”),现在你可以浏览或者修改工程的一些特性。注意在输出类型中是被设置为“控制台应用”。把输出类型改为“Windows应用”后,程序会和以前一样运行,但是不会出现那个控制台窗口。笔者个人发现这个控制台窗口在编程中还是相当有用的。我经常用它在程序运行时显示一些调试用的文本信息。还有一个好处,就是如果你的程序bug太多,甚至不能正常的显示一个窗体,或者陷入一个死循环,那么你可以轻松的在控制台窗口按下Ctrl+C键中止这个程序。
SayHello中用到的Window和Application类都是从DispatcherObject派生而来的,但是Window类有一个非常长的家谱,就像下面展示的类继承图一样:
Object
DispatcherObject(abstract)
Application
DependencyObject
Visual(abstract)
UIElement
FrameworkElement
Control
ContentControl
Window [Page]
当然,现在还没到和这些类继承图打交道的时候,但是在学习WPF的过程中间你难免会不断遇到这些个类。
一个程序可以在只有一个Application对象的情况下创建,这个对象可以充当程序其他部分的一直存在的锚。Application对象是不可见的;Windows对象有一个标题栏,标题栏的文本由Title属性指定。标题栏的左边有一个系统菜单,右边还有最小化、最大化和关闭按钮。窗口有一个可以调整大小的边框,并且有一个相当大的客户区域。
在SayHello程序中,你可以改变Main方法的顺序,而程序依然可以运行。例如,你可以在调用Show方法后再设置Title的属性。理论上说,这样改了之后,窗口在初始化的时候标题栏会没有文本,但是很快的就会出现,迅雷不及啊。
你可以在创建Window对象之前创建Application对象,但是一定要在最后调用Run方法。Run方法