Firemonkey样式设计器中另一个ListBox中的ListBox

时间:2013-06-12 15:05:46

标签: delphi listbox styles firemonkey delphi-xe4

我想制作一个非常复杂的界面,其中一个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是否支持吗?

谢谢。

2 个答案:

答案 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过程中。