附加属性

附加属性系统是0.5.0版本新增的功能,区别于普通属性附加属性是专门提供给子元素设置的。

比如:grid-panel提供了一个column-span的附加属性,如果子元素设置了该属性,那么在显示的时候就能跨列显示。

1
2
3
4
5
6
<grid-panel columns="3" column-spacing="10" row-spacing="10">
<!-- grid-panel.column-span="2" -->
<dock-panel height="30" background-color="red" grid-panel.column-span="2">
<lable text="1" />
</dock-panel>
</grid-panel>

附加属性在设置属性的时候有一个特点,那就是在属性之前必须添加父元素的名称并且加上.来连接。比如上面的grid-panel.column-span,意味着设置了一个由grid-panel提供的column-span属性。

注意点:

附加属性支持数据绑定,但是只支持once模式(默认绑定模式),这也就意味着附加属性不支持动画

自定义元素添加附加属性

首先自定义元素需要实现GICLayoutElementProtocol协议中的gic_elementAttachAttributs方法。而且该自定义元素必须显示使用GICElementsCache来注册,否则GIC无法识别。

实现代码如下:

1
2
3
4
5
+(NSArray<GICAttributeValueConverter *>*)gic_elementAttachAttributs{
return @[[[GICNumberConverter alloc] initWithName:GridPanelAttachColumnSpanKey withSetter:^(NSObject *target, id value) {
[[target gic_ExtensionProperties] setAttachValue:value withAttributeName:GridPanelAttachColumnSpanKey];
}]];
}

由于该属性是提供给子元素使用的,因此需要将该value保存到子元素中。也就是通过如下代码设置value。

1
[[target gic_ExtensionProperties] setAttachValue:value withAttributeName:GridPanelAttachColumnSpanKey];

使用如下方法来获取属性。

1
[[target gic_ExtensionProperties] attachValueWithAttributeName:GridPanelAttachColumnSpanKey];