delphi 如何在运行时更改 firemonkey 用户样式文本子属性

delphi How to change at runtime a firemonkey user style text sub-property

我创建了这样的样式:

然后我创建一个TLayout继承组件,命名为TLieu

我的目标是在运行时实例化它并更改:Image 属性, Title.Text 属性, Informations.Text 属性, Map, Infos, Link 按钮

我的代码,但它不起作用:

Procedure TF_Main.Button1Click(Sender: TObject);
var
  Lieu: TLieu;
begin
  Lieu := TLieu.Create(VSB_Place);
  Lieu.Name := 'Test';
  Lieu.StyleName := 'Lieu';
  Lieu.StylesData['Title.Text'] := 'My Title';
  // TLayout(Lieu).StylesData['Title.Text'] := 'My Title';  // this doesn't work either
end;

如何在运行时更改自定义用户样式组件的子属性?

  1. TLieu 必须继承自 TStyledControl
  2. 使用Lieu.StyleLookup代替Lieu.StyleName
  3. 在更改 StyleData 之前调用 ApplyStyleLookup

这是我如何使用 ListBox Item 的示例

vItem.StylesData['descript'] := 'Description';
vItem.StylesData['details'] := 'Details text';
vItem.ImageIndex := 3;

在我的例子中,"descript" 和 "details" 是文本。您可以在 StyleName 属性(样式)中更改名称。

在我的示例中,要通过为列表框项 (vItem.ImageIndex) 指定图像索引来简单地更改图像,样式中的 TGlyph 图像应具有名称 'glyphstyle'.

//如何访问样式中的组件:

vItem.NeedStyleLookup;
vItem.ApplyStyleLookup; // without this, FindStyleResource will return nil

vSwitch := vItem.FindStyleResource('switch') as TSwitch;
Assert(vSwitch <> nil);
vSwitch.IsChecked := vCampaign.Enable;
vSwitch.OnClick := DoOnClickSwitch;