如何在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 Student
 2  {
 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

示例代码

下载

posted on 2025-11-13 13:03  ljbguanli  阅读(0)  评论(0)    收藏  举报