虚幻ComboBox控件下拉列表背景底色问题调研与解决

在之前的文章虚幻ComboBoxString控件样式设置说明末尾有提到,“下拉框会有个固定底色挡住MenuBorderBrush,也就是很多网友都遇到的无法设置下拉框背景的问题。”针对这个问题,我当时在网上找了很多资料,得到的结论是官方就是这样设计的,要看后续引擎是否会调整。我做了调研,可以通过修改引擎源码将下拉列表固定底色修改为透明色来解决。不过,当时只处理了下拉列表的固定底色问题,没有解决Menu背景色问题,所以目前MenuBorderBrush仅适合设置矩形不透明图片。

接下来就将我当时的调研过程与结论整理出来,做个分享。

引擎版本:UE5.3.2

一、背景色组成分析

1.先将MenuBorderPadding设置成50

下拉框表现如下(灰色椭圆是我设置的选中项图片,可忽略):

为便于观察,修改引擎源码中对应颜色值,可以看出背景由三个部分组成:

继续将三个颜色值都改成透明,再给MenuBorderBrush设置一张半透明图片,理想效果如下:

二、引擎源码分析

2.1 Menu描边和背景

1.颜色定义

定义颜色值

将颜色枚举值设置给结构体FStyleColors的成员变量

2.定义笔刷 "Menu.Background" "Menu.Outline"3.SMenuContentWrapper中使用笔刷4.SMenuContentWrapper调用分析       

SMenuContentWrapper构造函数的调用堆栈SComboButton继承SMenuAnchor,展开下拉框时调用SMenuAnchor::SetIsOpen()FMenuStack::WrapContent()里实例化MenuStackInternal::SMenuContentWrapper

2.2 List背景

1.颜色定义(同Menu)2.定义笔刷 "ListView"3.SListView中使用笔刷4.SListView调用分析

SListView构造函数调用堆栈三、解决

三、解决方案

在2.2点的第3点可以看到,SListView类中_ListViewStyle有个默认值。

那我就在SComboBox类中实例化SListView的时候,手动传入一个无色(透明)的样式,即可解决下拉列表固定底色问题。

如下图所示:

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值