命名空间
可通过将 xmlns 属性添加到 XAML 文档中的根元素来定义命名空间。 通常情况下,Xamarin.Forms XAML 文档的根元素是 ContentPage。
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Sample.MyPage">
</ContentPage>
如你所见,xmlns 属性的值为 http://xamarin.com/schemas/2014/forms,它引用 Xamarin.Forms。 此值称为默认命名空间。
第二个命名空间 (xmlns:x) 具有一个前缀。 冒号后面的 x 是名称空间前缀。 使用前缀来指示要引用的命名空间(非默认命名空间)。 例如,在这种情况下,x 命名空间引用的是 XAML 本身。 可以在此命名空间中找到内部 CLR 类型(如 string、integer 和 double)。
类型转换器
示例
<Label Text="Username" TextColor="Black" FontSize="42" FontAttributes="Bold,Italic" />
FontAttributes 是复杂对象的一个示例。 可以将值合并为一个以逗号分隔的字符串,即 “Bold,Italic”。 逗号分隔的字符串会被视为基于 [Flags] 的枚举,相应的类型转换器会将值的按位 OR 应用于属性。
复杂类型分配
类型转换器非常适合简单的属性设置;但是,在某些情况下,还需要使用对象的属性值创建完整对象。 此问题的解决方案是更改属性分配以使用基于元素的语法。 此语法称为“属性元素”窗体。 此语法涉及将属性 setter 分解为父子窗体,其中属性表示为元素标签中的“Type.PropertyName”。
假设你要为标签分配手势识别器,以便应用用户可以点击标签。 手势识别器是具有自身属性的复杂对象。 通常,需要分配这些属性来确保功能正常:
<TapGestureRecognizer NumberOfTapsRequired="2" />
如果需要将此值分配给 Label,可以这样编写 XAML:
<Label Text="Username" TextColor="Black" FontSize="42" FontAttributes="Bold,Italic">
<Label.GestureRecognizers>
<TapGestureRecognizer NumberOfTapsRequired="2" />
</Label.GestureRecognizers>
</Label>
Label 具有一个名为 GestureRecognizers 的属性,通过“属性元素”窗体,可以将 TapGestureRecognizer 添加到 Label 的手势列表中。