就如同其它的基于
XML的标记语言一样,XAML大体上也遵循XML的语法规则。例如每个XAML元素包含一个名称以及一个或多个属性。在XAML中,每个属性都是和某个WPF类的属性相对应的,而且所有的元素名称都和WPF中定义的类名称相匹配。例如<Button>元素就和System.Windows.Controls.Button类对应。
XAML是一个纯粹的标记语言,这也就意味着某个元素要实现一个事件的处理时,需要在该元素中通过特定的属性来指定相应的事件处理方法名,而真正的事件处理逻辑你可以通过C#或者VB.NET语言进行实现,我们是没有办法通过XAML来编写相应的事件处理逻辑的。如果你对ASP.NET技术比较了解的话,那么应该对代码后置这个概念不会陌生。对于一个WPF程序来说,我们也可以像ASP.NET那样采用代码后置模型,将页面和相应的逻辑代码分别存放在不同的文件中,也可以以一种内联的方式将页面和逻辑代码都存放在同一个文件中。一般来说,我们是不推荐采用后面这种方式的,但是如果你要坚持这种实现方式亦无不可,但是最好是采用代码后置的方式将呈现层和应用程序逻辑层分离开来。
下面我们通过一个具体的示例来讲解WPF程序中代码后置方式和内联方式的实现机制,在这个示例中依然是使用Button元素来说明这两种方式的区别和实现过程。下面我们通过如下的XAML代码来声明一个Button元素:
35 <Button 36 OnClick="ButtonClickedHandler" 37 Name="MyButton" 38 Width="50" 39 Content="Click Me!" /> |
而后我们在单击这个Button按钮时,将触发相应的事件,使得该按钮的宽度和其显示的内容信息将发生改变。对应的事件处理程序代码如下:
40 void ButtonClickedHandler(object sender, RoutedEventArgs eventArgs) 41 { 42 MyButton.Width = 100; 43 MyButton.Content = "Thank you!"; 44 } |
我们通过上面的程序清单可以看出,一旦点击了该按钮,就将使得按钮的宽度从50延展到100,而其显示的文本也由"Click Me!"变为"Thank you!"。同时也可以发现我们可以使用C#或者VB.NET自己对XAML元素的各个属性进行操作,这是因为所有XAML元素的属性都是和WPF类的属性戚戚相关的。为此,你不单单可以使用C#来改变Button的背景颜色、高度等属性,甚至还可以像以前的Windows窗体程序那样通过代码来调整Button元素的位置坐标。
如果要以内联的方式进行上述的实现,我们可以为在XAML文件中使用<x:code>元素,并将所有的内联代码都封装在<![CDATA[...]]>标签中,以确保分析器不会对其中的代码进行解析。下面就是上述示例的内联实现方式的代码:
01 <x:Code> 02 <![CDATA[ 03 void ButtonClickedHandler(object sender, RoutedEventArgs eventArgs) 04 { 05 MyButton.Width = 100 ; 06 MyButton.Content = "Thank you! "; 07 } 08 ]]> 09 </x:Code> |