我想制作一个非常复杂的界面,其中一个ListBox在另一个ListBox中。首先,ListBox1的所有元素从Firemonkey中的样式设计器获得样式“CustomItem”:
Item := TListBoxItem.Create(nil);
Item.Parent := ListBox1;
Item.StyleLookup := 'CustomItem';
然后,“CustomItem”样式中还有另一个ListBox(“ListBox2”)。
如何访问此ListBox2的“StyleLookup”属性?
Item.StylesData['ListBox2'].StyleLookup := 'CustomItem2'; //this does not work.
你知道Firemonkey是否支持吗?
谢谢。
答案 0 :(得分:2)
您误解了TListBox组件的工作原理以及StyleLookup属性的参与方式。 TListBox可以托管的唯一控件是TListBoxItem或该控件的后代。
您引用的CustomItem
只是样式对象的名称,它是Delphi Firemonkey CustomListBox示例中包含的自定义WBX样式的一部分。
通过将样式对象的名称提供给StyleLookup
属性,可以将样式对象分配给特定的列表框项目。
然后,该项目将按照该样式对象的指示进行视觉操作。
您真正需要的是FMX.TTreeView组件。您可以使其行为与TListBox完全相同,并且可以托管子项目。 我建议你仔细看看提供的Firemonkey样本。
答案 1 :(得分:1)
我不熟悉StylesData的用法,但可以使用OnApplyStyleLookup事件处理程序中的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过程中。