如何在WPF中实现ComboBox多选 - 教程

news/2025/11/13 13:06:46/文章来源:https://www.cnblogs.com/ljbguanli/p/19217758

如何在WPF中实现ComboBox多选 - 教程

在前面我介绍过WPFDevelopers这个项目

https://blog.csdn.net/zhaotianff/article/details/142941026

WPFDevelopers是一个优秀的WPF UI库。

它里面包含了一个MultiSelectComboBox控件,可以支持多选。

使用方法如下:

1、首先我们使用nuget引入 WPFDevelopers 0.0.0.2

image

2、然后修改App.xaml如下

1 7     8         9             
10                 
11                 
12             
13         
14     
15 

3、在界面上放置MultiSelectComboBox 

1 
10     
11         
12 
13         
14     
15 

4、设置多选项显示时的分隔符

默认是  ;,我们可以设置为其它字符,例如|

1 
2 
3 

5、设置显示类型

通过MultiSelectComboBox.ShowType属性可以设置MultiSelectComboBox的显示类型

可选TagText(默认)

Text显示效果

image

Tag显示效果

image

6、启用/禁用搜索

通过MultiSelectComboBox.IsSearch属性可以设置MultiSelectComboBox是否显示搜索框

IsSearch = true

image

IsSearch = false

image

7、增加多列显示

这里我们可以通过数据模板来控制显示,

这个功能不过多介绍,跟其它列表控件的数据模板使用方法一致。

如果对数据模板功能不了解,可以参考下面的链接

https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/data/data-templating-overview

1 8     9         
12     
13     
14         
15             
16                 
17                     
18                     
22                     
26                 
27                 
32                 
37                 
42             
43         
44     
45 

运行效果

16f7055011d871e50af1e2129213b8ed

8、添加项

我们先创建一个实体Student

1  public class Student2  {3      public int Id { get; set; }4 5      public string Name { get; set; }6 7      public override string ToString()8      {9          return $"{Id}-{Name}";
10      }
11  }

然后创建一个实体列表并绑定到MultiSelectComboBox

1 ObservableCollection students = new ObservableCollection();
2 students.Add(new Student() { Id = 1, Name = "张三" });
3 students.Add(new Student() { Id = 2, Name = "李四" });
4 students.Add(new Student() { Id = 3, Name = "王五" });
5 
6  //设置数据源
7 this.combox.ItemsSource = students;

也可以直接使用系统提供的基础类型,如stringint

对于系统提供的基础类型,下位项和选中项会显示实际值。

对于对象,如果我们需要控制它的下位项和选中项的显示值,可以通过重写ToString()函数(不指定字段)或者通过DisplayMemberPath属性指定字段。

9、手动设置选中项

1  //假设选中1,3项
2  var student1 = students.ElementAt(0);
3  var student3 = students.ElementAt(2);
4  var selectedList = new ObservableCollection() { student1, student3 };
5 
6  //设置选中项
7  this.combox.SelectedItemsExt = selectedList;

10、全选/取消全选

1 //全选
2 this.combox.SelectAll();
3 
4 //取消全选
5 UnselectAll

11、获取选中项

1  var selectedItems = this.combox.SelectedItems;
2 
3  foreach (Student student in selectedItems)
4  {
5      MessageBox.Show(student.Id.ToString() + "-" + student.Name);
6  }

运行效果:

demo

示例代码

下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/964256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内江低噪音西林瓶灌装轧盖机选型,适配洁净车间

在当前制药装备领域,洁净车间对设备运行噪音、无菌保障能力及自动化集成度的要求日益提升,尤其在西林瓶灌装环节,低噪音、高洁净适配性已成为选型核心指标。面对多样化的市场需求,业内企业纷纷优化产品结构,以满足…

week3task

实践报告 1.按照动态规划法的求解步骤分析作业题目“数字三角形”: 1.1 递归方程: dp[i][j]=triangle[i][j]+max(dp[i+1][j], dp[i+1][j+1]) 方程的定义:dp[i][j] 表示从位置 (i, j) 出发到达底部所能得到的最大路径…

trick 选记

拆贡献:数值贡献,所有值之和等于对于所有 i 求出 >=i 的个数求和(数值转 01)。 个体 -> 整体,一般可以考虑的有全局,操作,和操作所影响的更小的个体(或就是单独的个体)(这启示我们要多角度思考问题的本…

Python 元组Tuple 简介

元组Tuple 元组(Tuple)是Python中的一种不可变序列类型,用于存储多个有序的元素。一旦创建,元组的内容就不能被修改。 特点不可变性:元组一旦创建,不能修改其元素 有序性:元组中的元素保持插入顺序 元组可以包含…

网络串流 —— 地址

网络串流 —— 地址音频: BBC News: https://stream.live.vc.bbcmedia.co.uk/bbc_world_service视频:本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址,还有个别文章是汇总网上多份…

抗体人源化技术:治疗性抗体的迭代升级与临床突破

抗体作为能与抗原特异性结合的免疫球蛋白,是免疫系统的核心组成部分,在疾病预防与治疗中占据不可替代的地位。人类对抗体治疗的探索有着深厚的历史积淀,中国唐朝便已有种痘预防天花的记载,这一 “人痘接种术” 被公…

【日记】这个健身器材是真要命了(934 字)

正文今天上午发电机的人来巡检。尝试启动时没反应过来,被柴油燃烧的青烟窜了一脸。眼睛疼到现在。我能不能报工伤啊呜呜。今天又把事情拖到最后一天赶 DDL 呢,明天又有一些事情是 DDL。感觉自己懒得不行(笑。做完了…

Zabbix 配置中文界面、监控告警以及Windows、Linux主/被监控模板

Zabbix 配置中文界面、监控告警以及Windows、Linux主/被监控模板本次优化主要针对 Zabbix 监控配置文章进行结构化梳理与格式规范:一是重构内容框架,将 Linux 与 Windows 监控配置分离呈现,前置主动 / 被动检查核心…

算法-快速排序和归并排序

算法 快速排序 归并排序1. 快排 2. 归并排序最好情况、最坏情况、平均情况,时间复杂度都为\(O(nlogn)\) 空间复杂度为\(O(n)\)。归并排序不是原地排序算法,需要额外的空间来存储tmp数组。public static void mergeSo…

记一次 .NET 某理财管理客户端 OOM溢出分析

一:背景 1. 讲故事 这是训练营里的学员找到我的,让我帮忙看下为什么他的客户程序会偶发的出现 报错弹框,由于dump比较敏感,这里就不截图发出来了,由于是错误弹框,并不会出现程序崩溃,而且朋友在日志中也看到了 …

计算机毕业设计:Python农业数据可视化分析系统 气象数据 农业生产 粮食素材 播种数据 爬虫 Django框架 天气数据 降水量(源码+文档)✅

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

P14400 [JOISC 2016] 回转寿司 / Sushi

题意简介 给定一个长度为 \(n\) 的环状数组,每次询问给出 \(l,r,x\),依次遍历 \(i = l , \cdots , r\)(如果 \(l > r\),从 \(l\) 遍历到 \(n\),再从 \(1\) 遍历到 \(r\)),若 \(a_i > x\),则交换二者的值…

思路

思路大模型对宠物语言用拼音写. 然后就是人话跟宠物语言互相翻译任务.

灰度的openkruise rollout - Super

灰度的openkruise rollout一、openkruise的rollout类 例: apiVersion: rollouts.kruise.io/v1beta1 kind: Rollout metadata:annotations:kubectl.kubernetes.io/last-applied-configuration: >{"apiVersion&…

P14367 [JOISC 2018] 帐篷 / Tents

思路 注意到重要性质:每确定一对帐篷,那么这对帐篷所在行和列不能放置其他帐篷,这将解释后来的方案之间为什么不会互相冲突。 考虑设计 \(dp_{ i , j }\) 表示营地大小 \(i\) 行 \(j\) 列时的方案数,逐行计算,对于…

代码加密技术 - 实践

代码加密技术 - 实践2025-11-13 12:03 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…

P6532 [COCI 2015/2016 #1] TOPOVI

思路 删掉 \((r_1,c_1)\) 位置上值为 \(val\) 的棋子相当于再在原处放置一个相同的棋子使之异或后为 \(0\),故只需考虑放置新棋子后的影响。 显然一个棋子无法被攻击的充要条件是其所在行的异或和等于所在列的异或和,…

Apache Struts远程代码执行漏洞CVE-2025-12703解析

本文详细解析了CVE-2025-12703漏洞,这是一个已被官方撤销的Apache Struts远程代码执行漏洞。文章包含漏洞时间线、受影响产品和解决方案,虽然该CVE已被撤销,但仍值得安全研究人员关注。CVE-2025-12703 - Apache Str…

P9433 [NAPC-#1] Stage5 - Conveyors

思路 当 \(k = n\) 时,我们只需要用树上权值加和减去 \(s\) 到 \(t\) 的路径长度即可。 考虑对 \(s,t\) 是否在关键点组成的最小连通块内分类,记块内边权和为 \(sum\)。 若 \(s\) 和 \(t\) 都在连通块内,由特殊性质…

P11038 【MX-X3-T5】「RiOI-4」Countless J-Light Decomposition

简要题意 给定 \(n\) 个点的带权树,对每个点可选择 \(\leq k\) 条边清零边权,求最小化的以根节点为起点的所有链的边权和。 思路 令 \(dp_u\) 表示 \(u\) 子树内的最小边权和,首先会取到 \(\max \limits_{v \in son…