使用LiveBindings时如何正确调整可变高度TListViewItem的大小?

问题描述 投票:0回答:1

我有一个TListView,我正在使用OnUpdateObjects事件来确定TListViewItem的高度,而不取决于文本字段在数据集中的长度如何(我正在使用LiveBindings)。除了添加新记录时,此高度非常好,它的高度最初是TListViewItem的设计时高度。当我添加其他项目(大小不正确)时,旧记录将正确调整大小(以此类推以添加其他记录)。

我已经将代码基于ListViewVariableHeightItems示例项目。事件代码如下所示

procedure TForm8.lvLogUpdateObjects(const Sender: TObject;
  const AItem: TListViewItem);
var
  itemDetail: TListItemText;
  Text: string;
  AvailableWidth: Single;
  TextHeight : integer;
begin
  AvailableWidth := TListView(Sender).Width - TListView(Sender).ItemSpaces.Left
    - TListView(Sender).ItemSpaces.Right;

  // Find the text drawable which is used to calcualte item size.
  itemDetail := TListItemText(AItem.View.FindDrawable('txtDetail'));
  Text := itemDetail.Text;

  // Calculate item height based on text in the drawable
  TextHeight := GetTextHeight(itemDetail, AvailableWidth, Text);
  AItem.Height := round(itemDetail.PlaceOffset.Y + TextHeight);
  itemDetail.Height := TextHeight;
  itemDetail.Width := AvailableWidth;
end;

GetTextHeight函数直接来自ListViewVariableHeightItems项目,并且似乎正常工作。

我正在就如何获得TListViewItem的初始大小以反映txtDetail Drawable包含(或至少应包含在数据集中的文本)的长度提出建议。

delphi firemonkey delphi-10.3-rio tlistview
1个回答
0
投票

我只能找到一个相当la脚的解决方案,将额外的记录追加到数据集,然后取消它。如果有人可以提供更好的解决方案,我很乐意接受。

© www.soinside.com 2019 - 2024. All rights reserved.