2

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

谢谢你。

4

2 回答 2

2

您误解了TListBox组件的工作原理以及StyleLookup属性的参与方式。TListBox 可以承载的唯一控件是TListBoxItem或该控件的后代。

CustomItem您所指的只是样式对象的名称,它是 Delphi Firemonkey CustomListBox 示例中包含的自定义FMX
样式的一部分。

您可以通过将样式对象的名称提供给 StyleLookup
属性来将样式对象分配给特定的列表框项。然后,该项目将按照该样式对象的指示在视觉上表现。

您真正需要的是FMX.TTreeView组件。您可以使其行为与 TListBox 完全一样,并具有 Items 能够托管子项的额外好处。我建议您仔细查看提供的 Firemonkey 示例。

于 2013-06-12T17:43:06.430 回答
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 过程中。

于 2013-06-12T20:51:09.303 回答