[.NET]XAML(1)--物件生成(3)
来源:未知 责任编辑:责任编辑 发表时间:2015-03-01 01:48 点击:次
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="800">
<sample:TextBlock x:Name="ShowTextBlock" Text="Hello World" FontSize="72" xmlns:sample="clr-namespace:System.Windows.Controls;assembly=System.Windows" />
</phone:PhoneApplicationPage>
当然这样的XAML内容,看起来跟一般常见的XAML有所出入,一整个复杂了许多。因为XAML是由XML发展出来的,很多的格式沿用XML的规范。许多命名空间可以由上层的Element所提供,这样的规范大量减少XAML需要设定的数据内容。这部分有兴趣的开发人员可以参考XML的相关技术资料。另外各种开发平台也定义了一些默认的关键词,让XAML的设计可以变得更简洁,这部分有兴趣的开发人员可以参考开发平台的相关技术资料。以上面这个范例来说,因为是要产生开发平台预设的TextBlock,而这个开发平台预设的命名空间已经在PhoneApplicationPage做过宣告,所以可以将组件名称、命名空间都省略掉。XAML经过这些规范的简化之后,就可以产生出一般常见的XAML数据内容。
Property-Attribute
下面这段XAML,代表一个TextBlock对象, TextBlock对象有一个Text属性。当程序执行的时候,.NET会剖析XAML Element来产生一个TextBlock对象,并且将这个TextBlock对象的Text属性设定为Hello World、FontSize属性设定为72。像这样会设定一个对象属性的设定,称为「Property-Attribute」。
<TextBlock x:Name="ShowTextBlock" Text="Hello World" FontSize="72"/>
查询MSDN可以发现TextBlock的FontSize属性,是一个型别为System.Double的属性。而XAML因为是XML的格式,所以被限制了只能输入字符串形式的数据。受于这样的限制,.NET剖析Property-Attribute的时候,会尝试将字符串数据转型为对象属性的型别。以下面这个范例来说,在执行的阶段会看到.NET的错误通知,告知无法将字符串数据转型为System.Double。
<TextBlock x:Name="ShowTextBlock" Text="Hello World" FontSize="72Clark"/>
Property-Element
在XAML的规范里,Property-Attribute章节里的TextBlock范例,也可以写成下面范例的格式。将TextBlock的FontSize属性改写成为一对独立的标签,并且设定值写在标签的内容里。像这样设定一个对象属性的设定,称为「Property-Element」。
<TextBlock x:Name="ShowTextBlock" Text="Hello World" >
<TextBlock.FontSize>
72
</TextBlock.FontSize>
</TextBlock>
Property-Element的写法看起来有点多余,但其实这是为了XAML的延展性而设计。一般对象的属性有些不单纯是int、double这些实值型别,也有可能是一个对象(Class)、一个结构(Struct)。而一个对象又会有属性,整个对象就是以树状结构生长下去。这时Property-Attribute使用字符串来设定这个对象树状结构会显得力不从心。Property-Element定义了,可以使用Object-Element来当作内容来解决这个问题。.NET在剖析Property-Element的时候,会将Object-Element内容反射生成出对应的对象,设定为对象的对象属性。而使用Object-Element来当作Property-Element的内容另一个原因是,Object-Element自己是描述一个对象,它又可以拥有自己的Property-Attribute、Property-Element,这样就可以一层一层设计出对象的树状结构。
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>