现在的位置: 首页 > 综合 > 正文

WPF与Prism一并学习(二)

2018年05月27日 ⁄ 综合 ⁄ 共 2084字 ⁄ 字号 评论关闭

深度理解XAML本质

XAML到底是个啥玩意?从表面看,它是XML的子集,没错!那有人说,HTML也是啊!没错!他们都是!只不过HTML解析是由浏览器完成(HTML解析原理),XAML是由CLR完成.但解析以后的产物则完全不同,HTML解析纯粹是浏览器为了渲染出页面做的工作,XAML确是为了生成一个类,来取代原来Winform窗体类的desinger分部类文件,这一点可以通过观察反编译生成的IL知道。

XAML的本质应该是微软为了使用XML文件来动态生成界面类的一种对XML的扩展,然后微软定义了一系列XAML所独有的标签元素,用微软自己写好的解析器去解析XAML,从而生成C#类,网上已经有人举了很好的例子,这与Spring.net中用XML配置对象有曲艺同工之妙!

WPF整理-XAML构建后台类对象

所以浅显的认为,XAML与HTML一样,是为了渲染界面而生的,那就大错特错了.我们只是用类似开发网页界面的方式在开发桌面程序的界面,而编译器,CLR帮我们解析XAML从而生成与界面有关的类(xxxxx.designer.cs),严格的说,一个WPF程序,可以一个XAML文件都没有,照样可以开发,而XAML的目的只是为了将桌面程序的界面设计工作,与后台编码工作完全隔离开来,并解耦.这点从它定义的标记也看的出来(x:Class)

表2-1.x:命名空间的特性

特性 描述
x:Class 将各个部分类组合在一起。验证语法:x:Class="namespace.classname"和x:Class="namespace.classname;assembly=assemblyname"。XAML页面会生成类的部分代码,再由后台代码进行组合。
x:Key 在XAML中提供了被资源定义的唯一标识符,通过标记扩展来引用资源极其重要。标识符必须以字母、下划线开头并且只能包含字母、数字和下划线。
x:Name 在XAML中为对象元素提供了唯一标识符用来通过后台代码来访问这些对象元素。在资源文件中此方式不适用(在资源文件中应该使用x:Key来代替x:Name)。许多元素都有Name属性,当Name和x:Name都可使用时,只能设置其中一个。标识符必须以字母开头或者下划线,并且只能包含字母、数字和下划线。
x:Null 和C#中的null类似(在VB.NET中则是Nothing)。可以通过标记扩展({x:Null})或者通过属性元素(<x:Null/>)。

XAML的树形结构

与传统的winform不同的是,XAML使用树状的层次结构来描述UI,你可以很直观的知道,一个按钮位于哪个控件内部,这与winform的desinger文件截然不同,类似于panel.add(button)这样的代码,你才知道按钮位于一个panel之内,这样的表现方式很不直观。

  1. <Window x:Class="WpfApplication2.Window2"  
  2.         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
  3.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
  4.         Title="Window2" Height="331" Width="454">  
  5.     <StackPanel Height="279" Name="stackPanel1" Width="402" Margin="5"
     Background="AliceBlue">  
  6.         <TextBox Height="23" Name="textBox1" Width="260" Margin="5"/>  
  7.         <TextBox Height="23" Name="textBox2" Width="259" />  
  8.         <StackPanel Height="100" Name="stackPanel2" Width="273"
     Orientation="Horizontal">  
  9.             <TextBox Height="23" Name="textBox3" Width="120" Margin="5"/>  
  10.             <TextBox Height="23" Name="textBox4" Width="120" Margin="5"/>  
  11.         </StackPanel>  
  12.         <Button  Height="33" Name="button1" Width="99" Margin="10">  
  13.             <Image Source="/WpfApplication2;component/Images/track.png" />  
  14.         </Button>  
  15.     </StackPanel>  
  16. </Window>  

抱歉!评论已关闭.