创建XAML文件
创建XMAL文件有一些标准。首先,XAML文件里的每一个元素都是一个.NET类的实例。元素的名称必须和类的名称精确匹配。例如<TextBock>告诉WPF创建一个TextBlock对象。
在XAML文件里,你可以将一个元素嵌套到另一个元素里面。这样,那就可以将一个元素作为一个孩子放入另一个元素。例如,你可以在Canvas里放一个Button,这就是意味着你的UI包含一个拥有一个Button孩子的Canvas。你可以通过设置特性来对每一个元素的属性进行设置。
让我们看一下一个简单的XAML文件的结构:
<Windowx:Class="WPFOverview.FirstWPFProgram" xmlns="http://schemas.micro.softcom/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title=" FirstWPFProgram" Height="300"Width="300"> <Grid> <TextBlock>Hello,WPF!</TextBlock> </Grid> </Window>
Window元素的开始标签包含一个类名和两个XML命名空间。这个xmlns特性是一个XML里的专用特性,留作声明命名空间。前面小段代码中的两个命名空间将出现在所有WPF XAML文件中。你只需要知道这些命名空间简单地允许XAML解释器找到正确的类。这三个标签的属性也需要注意:Title,Height和Width。每一个特性和Window类里的每一个属性相关。这些特性告诉WPF创建一个标题叫FirstWPFProgram的300*300的窗体。
在Window标签里面是一个包含一个Text属性为“Hello,WPF”的TextBlock的Grid控件。你也可以使用下面的一小段语句创建相同的TextBlock:
<TextBlockText="Hello, WPF!"/>
后台代码文件
XAML用来给你的应用程序创建UI;但是为了使你的应用程序工作,你需要添加一些事件处理器到UI上。XAML使用下面的类的特性让这变得简单:
<Windowx:Class="WPFOverview.FirstWPFProgram"… … >
当你创建一个WPF应用程序时,Visual Studio 自动生成一个partial类,在里面你可以放置你的事件处理代码。前面我们讨论了一个简单的XAML文件WPFOverview.xaml。如果你创建一个叫做FirstWPFProgram的WPF Windows应用程序,Visual Studio将自动生成下面的后台代码文件:
using System; usingSystem.Windows; usingSystem.Windows.Controls; usingSystem.Windows.Media; namespaceFristWPFProgam { /// <summary> /// Interaction logic forFirstWPFProgram.xaml /// </summary> public partial class FirstWPFProgram : Window { publicFirstWPFProgram() { InitializeComponent(); } } }
前面的后台文件只包含一个默认的构造器,当你创建类的实例的时候叫做InitializeComponent方法。这个和Windows Forms里的C#类类似。
你的第一个WPF应用程序
我们来考虑一个简单的WPF例子。打开Visual Studio 2008,创建一个叫做WPFOverview.的新的WPF Windows Application。从项目中移除默认的window1.xaml和window1.xaml.cs文件并添加一个新的WPF Windows到项目中。命名为StartMenu,会增加两个文件,StartMenu.xaml 和StartMenu.xaml.cs到项目中。打开App.xaml文件,将StartupUri属性从window1.xmal改变为StartMenu.xaml。通过这些操作,你将StartMenu窗体作为主要的菜单窗体,通过它你可以使用所有项目里的例子。你可以检查这两个文件的源代码去看他们是怎么实现的。这个文件结构将贯穿整本书的每一章,用来使用代码例子。添加另一个新的WPF Window到项目中,命名为FirstWPFProgram。图1-1显示这个例子的运行结果。它包含一些控件:一个Grid,WPF程序里最常见的用于组织布局的控件,一个放置在Grid里的StackPanel,用来放置其他控件,包括一个TextBlock,一个TextBox和两个Button控件。这个例子的目的是当用户在TextBox里输入文字的时候改变TextBlock里的文字。同时,当用户点击ChangeText Color 或者ChangeText Size按钮的时候,TextBlock文字的颜色或字体大小会改变。
图1-1 你的第一个WPF程序例子
XAML属性
打开默认的 FirstWPFProgrm.xaml文件,添加下面的代码到文件中:
<Windowx:Class="WPFOverview.FirstWPFProgram" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title=" FirstWPFProgram"Height="300" Width="300"> <Grid> <StackPanel> <TextBlockName="textBlock" Margin="5" TextAlignment="Center" Text="Hello WPF!"/> <TextBoxName="textBox" Margin="5" Width="200" TextAlignment="Center" TextChanged="OnTextChanged"/> <Button Margin="5"Width="200" Content="Change TextColor" Click="btnChangeColor_Click"/> <Button Margin="5"Width="200" Content="Change TextSize" Click="btnChangeSize_Click"/> </StackPanel> </Grid> </Window>
<TextBlockName="textBlock" Margin="5" TextAlignment="Center"Text="Hello WPF!"/>