OrangeUI

接下来要讲的在是运行时操作ItemDesignerPanel中的控件来设置列表项的属性,
我们在ItemDesignerPanel中添加一个CheckBox来举例。
要达到的效果:
如果列表项的Checked为True,那么CheckBox显示打勾,
如果列表项的Checked为False,那么CheckBox显示不打勾,
并且点击CheckBox的时候可以设置列表项的Checked属性,

首先,
根据每个列表项的Checked属性来让CheckBox显示是否勾选,
这在ListBox的OnPrepareDrawItem事件中处理,
OnPrepareDrawItem在每个列表项开始绘制的时候调用,
可以在这个事件里面根据列表项来设置ItemDesignerPanel上子控件的属性:

代码如下:
引用uDrawCanvas,uSkinItems这两个单元,

procedure TFrameListBox_UseRunTimeBinding.lbFileListPrepareDrawItem(
Sender: TObject; Canvas: TDrawCanvas;
ItemDesignerPanel: TSkinFMXItemDesignerPanel; Item: TSkinItem;
ItemRect: TRect);
Begin
//Canvas用于绘制列表项,TDrawCanvas在uDrawCanvas中定义
//Item是当前绘制的列表项,TSkinItem在uSkinItems中定义
//ItemRect,此列表项的显示矩形
Self.chkItemChecked.Prop.StaticChecked:=Item.Checked;
end;
 
接着,将CheckBox的HitTest设置成True,让其响应鼠标点击事件,
在事件中写如下代码:

procedure TFrameListBox_UseRunTimeBinding.chkItemCheckedClick(Sender: TObject);
begin
//InteractiveItem是鼠标当前点击所在列表项。
Self.lbFileList.Properties.InteractiveItem.Checked:=
Not Self.lbFileList.Properties.InteractiveItem.Checked;
end;