首页 > 解决方案 > 更改列表框的选择不透明度

问题描述

我无法更改 FireMonkey 列表框的选择不透明度。就我而言,我想更改选区的颜色,并使其完全不透明。起初,我尝试通过基于默认样式的自定义样式更改 de ListBox 的样式来做到这一点。选择部分是不透明度为 1 的 TStyleObject。我将其替换为填充为红色的 TRectangle。应用我的样式后,我注意到选择与我为选择选择的鲜红色不同。

所以我只是深入 FMX.ListBox 代码,看看那里发生了什么。令我惊讶的是,我发现选择的不透明度在 TCustomListBox ApplyStyle 过程中硬编码设置为 0.7。我希望风格负责事物的外观。我不知道这是否是错误的思考方式,但这不是我所期望的。

在此之后,我尝试通过使用以下代码实现 OnApplyStyleLookup 事件来更改选择不透明度运行时。

procedure TForm1.ListBox1ApplyStyleLookup(Sender: TObject);
var
  SelectionControl: TControl;
begin
  if ListBox1.FindStyleResource<TControl>('selection', SelectionControl) then
    SelectionControl.Opacity := 1;
end;

然而,这没有效果。我尝试通过从 TCustomListBox 派生并覆盖 ApplyStyle 方法在新的自定义 ListBox 控件中做同样的事情,在 TCustomListBox 的 ApplyStyle 之后通过继承的关键字我放置代码以将选择不透明度设置为 1。这也没有任何影响。

我只是以错误的方式解决这个问题,我是否遗漏了什么,或者只是德尔福很奇怪。

标签: delphilistboxfiremonkey

解决方案


推荐阅读