天天看点

c#代码到XAML的变化

C#中用控件对象及其属性和方法来实现各种界面控件元素和效果,而XAML中使用标记语言来实现界面元素的显示,其标记形式为:<控件的系统命名特性名=”值”></控件的系统命名>。

在C#代码中我们称属性为property,而在XAML语言中我们成为特性attribute,虽然他们的名字一样,但是实现方式上却有区别。效果虽然一样,但是用C#编的代码和用XAML编的代码的运行方式不一样。对于纯C#代码编出来的应用程序,不会有BAML和.g.cs中间代码,而是直接经过MSIL编译成应用程序,相对而言,由XAML编的会经过编译成BAML和.g.cs中间代码这个步骤,再生成应用程序。不过这个中间步骤只是在编译时,实际Release这个应用程序时同样进行了优化,所以生成的应用程序不会有性能上的太大差别。

XAML映射了C#的命名空间:

Windows Presentation Foundation (WPF) 命名空间映射为默认命名空间:xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation";映射单独的可扩展应用程序标记语言(XAML)命名空间,通常将其映射为x:前缀,xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"这些声明之间的关系是:XAML实际上是语言标准,而WPF是将XAML作为语言使用的一个实现。XAML 语言指定一些为了兼容而假定要实现的语言元素,每个元素都应当能通过针对XAML命名空间执行的XAML处理器实现进行访问。WPF实现为自己的API保留默认命名空间,为XAML 中需要的标记语法使用单独的映射前缀。按照约定,该前缀是x:,该约定后面是项目模板、示例代码和此 SDK 中语言功能的文档。XAML命名空间定义了许多常用功能,这些功能即使对于基本的WPF应用程序也是必需的。若要通过分部类将任何代码隐藏加入XAML文件,必须将该类命名为相关XAML文件的根元素中的x:Class属性。或者,在XAML页中定义的、希望作为控件资源访问的任何元素应当对相关元素设置了x:Key 属性。语法使用下列可能的命名标记和值:clr-namespace:在包含要作为元素公开的公共类型的程序集中声明的公共语言运行库(CLR)命名空间。assembly=是指包含部分或全部引用的 CLR 命名空间的程序集,该值通常只是程序集的名称,而不是路径。该程序集的路径必须在生成编译的 XAML 的项目文件中以项目引用的形式建立,在程序集中将CLR命名空间映射为XML命名空间WPF定义一个CLR属性,XAML处理器使用它来将多个CLR命名空间映射到单个XML命名空间。XmlnsDefinitionAttribute 属性放置在生成程序集的源代码中的程序集级别。WPF 程序集源代码使用此属性将各种常见的命名空间(如System.Windows和System.Windows.Controls)映射到http://schemas.microsoft.com/winfx/2006/

xaml/presentation命名空间。XmlnsDefinitionAttribute 采用两个参数:XML 命名空间名称和 CLR 命名空间名称。可以存在多个 XmlnsDefinitionAttribute,这样便可以将多个 CLR 命名空间映射到同一 XML 命名空间。映射后可通过在分部类代码隐藏页中提供相应的using语句来引用这些命名空间的成员而无需完全限定。

XAML到C#上的映射具体如上所述,而C#到XAML的变化已经在在段头做了分析,并分析了用C#编的代码和用XAML编的代码的运行方式是如何不一样的。

继续阅读