如何设置DevExpress ComboBox的ListControl高度随条目数自动收缩
DevExpress ComboBoxEdit 下拉列表高度动态适配方案
- 保留原有最多展示8条的配置,无需修改现有最大高度限制逻辑
- 为
ComboBoxEdit绑定Popup事件,下拉弹出时动态计算实际所需高度,代码示例如下:
private void comboBoxEdit1_Popup(object sender, EventArgs e) { ComboBoxEdit edit = sender as ComboBoxEdit; if (edit == null || edit.Properties.Items.Count == 0) return; // 计算单条条目高度(自动适配主题/自定义配置) int itemHeight = edit.Properties.GetListItemHeight(edit); // 计算实际需要的总高度,+2为下拉框上下内边距,可根据实际显示效果微调 int actualHeight = edit.Properties.Items.Count * itemHeight + 2; // 最大高度固定为8条对应的高度,和原有配置对齐 int maxAllowedHeight = 8 * itemHeight + 2; // 获取下拉弹出窗口实例 PopupListBoxForm popupForm = edit.GetPopupEditForm() as PopupListBoxForm; if (popupForm != null) { // 取两个高度的较小值,实现少于8条自适应,超过8条固定高度带滚动 popupForm.Height = Math.Min(actualHeight, maxAllowedHeight); } }
- 若你的
ComboBoxEdit开启了搜索过滤功能,条目数会在输入时动态变化,需额外绑定Properties.ListChanged事件,在过滤后自动更新下拉高度:
private void comboBoxEdit1_Properties_ListChanged(object sender, ListChangedEventArgs e) { ComboBoxEdit edit = sender as ComboBoxEdit; // 仅当下拉框处于打开状态时更新高度 if (edit == null || !edit.IsPopupOpen) return; PopupListBoxForm popupForm = edit.GetPopupEditForm() as PopupListBoxForm; if (popupForm != null) { int itemHeight = edit.Properties.GetListItemHeight(edit); int actualHeight = edit.Properties.Items.Count * itemHeight + 2; int maxAllowedHeight = 8 * itemHeight + 2; popupForm.Height = Math.Min(actualHeight, maxAllowedHeight); } }
- 其他适配说明:
- 如果你使用了自定义条目绘制、自定义条目模板,需要将
itemHeight替换为你自定义的单条条目高度值 - 若为WPF平台的
ComboBoxEdit,核心逻辑一致,仅需替换为WPF平台对应的Popup实例获取、高度赋值API即可
- 如果你使用了自定义条目绘制、自定义条目模板,需要将
内容的提问来源于stack exchange,提问作者FirstByte
相关产品推荐
相关产品推荐

