XAML和计算机主板

Tue 23 July 2019 / In categories Library

WinRT, XAML

让我在此开一个脑洞吧,把XAML和计算机主板做对比。

现代的电子设备基本上都具有计算能力。而计算能力是由芯片提供的。一款设备中可以有多个芯片,提供不同的功能。这些芯片通常是通过标准的接口,安插在主板上,彼此之间通过看得见或者看不太见的排线连接在一起,达到互相通信的目的。主板的基础是印刷电路板,排线是蚀刻在印刷电路板上面的,然后在版上提供不同的孔位来安装插槽,来承接芯片。芯片也可以直接焊接在电路板之上。

我们可以拿XAML和计算机主板做对比。XAML可以看作是一块主板,提供标准化的功能和插槽。XAML所基于的XML可以看成是底下的印刷电路板。虽然使用XAML可以替代很多代码,但是XAML并不能完全代替代码。我们可以把一串一串代码看出一组一组芯片,XAML把这些代码组织和联结起来,就像主板把芯片联结起来的感觉一样。有了XAML之后,不必把所有的代码都写在一起,形成一大团,而是可以分而治之。就像计算机主板上既有CPU芯片,又有内存控制芯片,两者可以分开开发,由不同的供应商提供。

主板这种形式可以被不同的设备所使用,就像XAML可以支持WPF,Silverlight, UWP等不同的应用程序一样。当然,通用化的XAML意味着它需要一些标准化工作,比如从语法层面,XAML可以使用XML元素来创建对象,并且支持使用XML元素的属性来设置所创建对象的权属(此方式称为Property-Attribute方式);另外,XAML也支持通过XML元素本身来设置所创建对象的权属(此方式成为Element-Property),以嵌套的方式来创建对象,并赋值给上层对象的权属。XAML对其可以使用XML元素方式创建的对象的类型也有要求,这些对象的类型必须是从DependencyObject派生出来的。而DependencyObject的派生类中可以定义静态的DependencyProperty。这些DependencyProperty和普通的权属(Property)不同,前者是全局的,就像电路板上的孔槽一样,可以通过管线进行联结,来在不同的对象之间进行通信,可以在不同的事件处理器中触发使用。

另外XAML对可以在其中使用的元素的种类也有定义,这是通过XML的命名空间来定义的,如下所示:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
</Page>

出了标准化之外,XAML还需要对很多场景提供标准的解决方案,比如:

  • 通常XAML必须和代码配合使用,XAML通过code-behind这种方式来指定与对象的代码绑定,并且可以给XAML元素取名(通过Name或者x:Name属性),这样可以在代码中引用该元素。
  • XAML的很多元素支持使用Resources权属来创建资源字典。在资源字典中的对象和数据可以共享。
  • XAML支持可以对DependencyProperty指定样式(Style),可以自上而下应用在对象层级中。
  • XAML支持若干种模板(Template),比如数据模板(DataTemplate)、控制模板(ControlTemplate)和列表展示模板(ItemsPanelTemplate)等等。把一部分逻辑放在模板中,可以对XAML元素进行更深层定制。
  • XAML支持将元素的事件和背靠代码(code-behind)中的处理函数绑定。
  • XAML支持换页操作,可以将窗口的当前页面的内容替换成来自不同页面的内容。

以上等等。

(完)

Load Disqus Comments