定义一个XAML程序
在这里我们就先不使用WinFX Extensions to Visual Studio 2005来构建一个包含XAML代码的WPF程序了,因为它包含了一些自动生成的XAML代码,为了循序渐进地学习XAML的基础语法和规则,在本小节中就用记事本来开发一个简单的包含XAML的WPF程序。
一般来说,我们通常是将一个WPF的代码分别存放在两个不同类型的文件中。例如.xaml页面文件用来保持为该WPF程序构建的用户界面代码,而代码后置文件.xaml.cs则用来保存应用程序逻辑和事件处理代码。虽然XAML没有提供一个实现事件处理的机制,但是它可以直接通过执行引擎调用用C#或者VB.NET编写的事件处理方法。如果您是一个开发人员,或许你专注的只是应用程序逻辑和事件处理程序的开发。但是在该WPF程序中界面代码和程序逻辑是分离的,所以你必须和其它的设计人员进行良好的沟通,使得你可以确切地知道事件处理方法的名称和程序所引用的元素名称(事件处理方法的名称和元素名称都是在XAML文件中指定的)。
提示:你可以完全使用C#或VB.NET来定义一个XAML程序,在前面我们讲过,所有的XAML元素都是代表一个WPF类,因此你可以通过代码的方式去实现XAML的界面设计。但是XAML可以将应用程序的呈现层完全和程序逻辑分离开来,为此就使得设计人员和开发人员可以更加专注于自己的领域,而在需要修改界面元素或程序逻辑时互不影响。
XAML页面文件通常包含两种类型的元素,一种就是用来构建用户界面的元素,另外一种则是应用程序元素。而
Application就是一个常用的应用程序元素。我们在使用Visual Studio 2005开发一个ASP.NET站点时通常会使用图1的方式,将某个页面设置为起始页。而在一个WPF程序中,我们可以使用Application元素指定在该WPF程序启动时,首先执行那个XAML页面文件。为此,在我们手动创建一个WPF程序时,首先要编写的就是应用程序定义文件。下面是一个名为MyApp的应用程序定义文件,其代码如下:
MyApp.xaml:
01 <Application 02 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 03 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 04 StartupUri="Page1.xaml"> 05 </Application> |
在上述的应用程序定义文件中,我们设置了两种类型的属性,分别为命名空间和StartupUri,StartupUri属性就是用来指定应用程序开始时所要加载的起始XAML文件。
图1 ASP.NET中设置起始页的方法 |
在XAML中,每个元素都是代表一个相应的WPF类,并且元素的各个属性也是对应类的属性。惟一的例外就是xmlns和xmlns:x两个属性,它们指定了该XAML页面文件所使用的默认命名空间,而不是某个类的属性。通常我们在应用程序定义文件中设置好这两个命名空间作为WPF程序引用的默认命名空间,如果不做这样设置的话,那么你必须为应用程序定义文件中的所有XAML每个元素都指定相同的两个xmlns和xmlns:x属性,这和我们在C#中使用using关键字来引用命名空间是类似的。为了减少重复且冗长的输入,我们最好是在应用程序定义文件事先设置好这些默认的命名空间。但是有一种情况除外,那就是使用的是自己命名空间中所定义的元素,在这种情况下,可以将自定义元素的xmlns和xmlns:x属性指定为自身的命名空间。在本文的所有代码示例中,都将在根元素中引用上述的两个默认命名空间,当然你也可以对根元素中的所有元素都指定命名空间,但是这种方式是不推荐的,因为这样不但繁杂,而且使得XAML页面代码冗长。
在任何一个XAML页面文件中首先声明的元素就是前面我们所提及的根元素,每个根元素最好都引用默认的命名空间,在目前版本的WPF程序中,所以的根元素引用的都是下面的两个命名空间:
http://schemas.microsoft.com/winfx/2006/xaml/presentation
http://schemas.microsoft.com/winfx/2006/xaml
提示:
为什么说目前的WPF程序引用的是上述的两个命名空间呢?这是因为到Vista正式发布时,这两个命名空间的名称可以会发生变化,在以前的CTP版本中,WPF程序引用的命名空间名称为http://schemas.microsoft.com/winfx/avalon/2005。
在根元素中可以包含其它的XAML元素。在应用程序定义文件中的最常用的就是Application元素,而且根据你所创建的是Windows应用程序还是Browser应用程序,分别使用特定的Windows和Page作为XAML文件的根元素。
在代码2-1中,我们在根元素Application指定了该程序执行时首先加载的XAML页面文件,在上述示例中,StartupUri的属性值为"Page1.xaml",下面我们就来创建Page1.xaml,该文件包含了用户界面的实际定义,就像其它的XAML页面文件一样,我们需要为该文件使用一个根元素。其完整的XAML页面代码如下:
Page1.xaml
01 <Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 02 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 03 <StackPanel> 04 <TextBlock>Hello World</TextBlock> 05 <Button Width="100">Click Me</Button> 06 </StackPanel> 07 </Page> |
在上述程序代码中,我们在第1行代码处设置了XAML页面文件的根元素为Page,这说明了该WPF程序将使用浏览器进行呈现。第3行代码使用了StackPanel元素,它是用来包含其它的XAML元素的一个容器,功能和它类似的还有DockPanel元素,我们将在后续的学习过程中详细介绍这两个元素,现在你使要知道的就是它们是一个用来包含其它XAML元素的容器元素即可。第4行代码中使用的是TextBlock,这个元素和ASP.NET的Label空间非常类似,用来显示一段文本信息。将这段代码粘贴到XAMLPad中,其显示的效果如下:
这是一个及其简单的XAML页面文件,除了一些必要的属性外,我们并没有进行其它的一些额外设置,例如对该页面应用样式、布局等,对于这些信息的使用方法将在后续直接进行介绍。在这一节中我们只需关注如何创建一个最简单的应用程序定义文件和XAML页面文件即可。现在我们已经创建了MyApp,xaml和Page1.xaml这两个XAML文件,那么通过什么样的方法才能编译这些文件,并执行最终的可执行文件呢?具体的实现过程将在下一节中进行介绍。
查看本文来源