我想做一个非常复杂的界面,其中一个列表框是在另一个。首先,ListBox1的所有元素从Firemonkey的style Designer中获得一个样式"CustomItem":
Item := TListBoxItem.Create(nil);
Item.Parent := ListBox1;
Item.StyleLookup := 'CustomItem';
然后,有另一个样式为"CustomItem"的ListBox ("ListBox2")。
如何访问这个ListBox2的"样式查找"属性?
Item.StylesData['ListBox2'].StyleLookup := 'CustomItem2'; //this does not work.
你知道Firemonkey是否支持吗?
谢谢。
您误解了TListBox组件的工作方式以及涉及到的styellookup属性的方式。TListBox可以承载的唯一控件是TListBoxItem或该控件的后代。
你提到的CustomItem
只是一个风格对象的名字,它是Delphi Firemonkey CustomListBox样本中包含的自定义
FMX风格的一部分。
你可以通过给stylesellookup
属性提供样式对象的名称来给一个特定的列表框项分配样式对象。然后项目将按照样式对象的指示在视觉上表现。
你真正要找的是FMX。树组件。您可以使它的行为与TListBox完全相同,并增加了Items能够承载子项目的额外奖励。我建议您好好看看所提供的Firemonkey示例。
我不熟悉StylesData的用法,但这可以通过onapplystylellookup事件处理程序中的FindStyleResource来完成。
procedure TForm1.ApplyStyleLookupEvent(Sender: TObject);
var O: TFMXObject;
begin
O := (Sender as TFMXObject).FindStyleResource('ListBox2');
if O is TStyledControl then
TStyledControl(O).StyleLookup := 'CustomItem2';
end;
如果你有一个自定义的TListBoxItem对象,你也可以把它放在你的ApplyStyle过程中