当前位置: 首页 > news >正文

如何在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 <Application x:Class="WDMultiSelectComboBoxDemo.App"2              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"3              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"4              xmlns:local="clr-namespace:WDMultiSelectComboBoxDemo"5              xmlns:wd="https://github.com/WPFDevelopersOrg/WPFDevelopers"6              StartupUri="MainWindow.xaml">7     <Application.Resources>8         <ResourceDictionary>9             <ResourceDictionary.MergedDictionaries>
10                 <ResourceDictionary Source="pack://application:,,,/WPFDevelopers;component/Themes/Theme.xaml" />
11                 <wd:Resources />
12             </ResourceDictionary.MergedDictionaries>
13         </ResourceDictionary>
14     </Application.Resources>
15 </Application>

3、在界面上放置MultiSelectComboBox 

 1 <Window x:Class="WDMultiSelectComboBoxDemo.MainWindow"2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"4         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"5         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"6         xmlns:local="clr-namespace:WDMultiSelectComboBoxDemo"7         mc:Ignorable="d"8         Title="MainWindow" Height="450" Width="800"   9         xmlns:wd="https://github.com/WPFDevelopersOrg/WPFDevelopers">
10     <StackPanel>
11         <wd:MultiSelectComboBox Name="combox">
12 
13         </wd:MultiSelectComboBox>
14     </StackPanel>
15 </Window>

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

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

1 <wd:MultiSelectComboBox Name="combox" Delimiter="|">
2 
3 </wd:MultiSelectComboBox>

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 <wd:MultiSelectComboBox2     Name="cbbb"3     Width="150"4     Height="60"5     IsSearch="False"6     ItemsSource="{Binding Students}"7     SelectedItemsExt="{Binding Selectitems, Mode=TwoWay}">8     <wd:MultiSelectComboBox.ItemContainerStyle>9         <Style BasedOn="{StaticResource WD.DefaultMultiSelectComboBoxItem}" TargetType="wd:MultiSelectComboBoxItem">
10             <Setter Property="IsSelected" Value="{Binding IsChecked}" />
11         </Style>
12     </wd:MultiSelectComboBox.ItemContainerStyle>
13     <wd:MultiSelectComboBox.ItemTemplate>
14         <DataTemplate>
15             <Grid>
16                 <Grid.ColumnDefinitions>
17                     <ColumnDefinition Width="*" SharedSizeGroup="Col1" />
18                     <ColumnDefinition
19                         Width="Auto"
20                         MinWidth="200"
21                         SharedSizeGroup="Col2" />
22                     <ColumnDefinition
23                         Width="Auto"
24                         MinWidth="100"
25                         SharedSizeGroup="Col3" />
26                 </Grid.ColumnDefinitions>
27                 <TextBlock
28                     Grid.Column="0"
29                     Padding="10"
30                     VerticalAlignment="Center"
31                     Text="{Binding Name}" />
32                 <TextBlock
33                     Grid.Column="1"
34                     Padding="10"
35                     VerticalAlignment="Center"
36                     Text="{Binding Description}" />
37                 <TextBlock
38                     Grid.Column="2"
39                     Padding="10"
40                     VerticalAlignment="Center"
41                     Text="{Binding Age}" />
42             </Grid>
43         </DataTemplate>
44     </wd:MultiSelectComboBox.ItemTemplate>
45 </wd:MultiSelectComboBox>

运行效果

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<Student> students = new ObservableCollection<Student>();
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<Student>() { 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.dtcms.com/a/491040.html

相关文章:

  • 单北斗GNSS变形监测是什么?主要用于大坝及桥梁安全监测吗?
  • 网站建设公司的服务器建设网站申请书
  • 如何加强省市级门户网站的建设太原网站优化服务
  • YOLO-V1 与 YOLO-V2 核心笔记
  • 公司做网站的价格江阴宁波网站建设那家好
  • 2025年--Lc192-5. 最长回文子串(动态规划在字符串的应用)--Java版
  • Docker容器化核心知识体系:从入门到实践
  • 华为云建站怎么样安徽先锋网站两学一做
  • 驾驭Excel数据:使用C#将Excel导出为DataTable的实战指南
  • LeetCode 400 - 第 N 位数字
  • 团购网站开发的可行性分析营销推广渠道有哪些
  • SHA-256 算法
  • 淘宝网官方网站购物商城电子邮件免费注册
  • 网站策划薪资大型网站开发团队
  • 广西建设质监站官方网站成都装修公司招聘装修工人
  • 了解学习Python编程之python基础
  • html5 手机网站页面实例创建全国文明城市宣传栏
  • 10.16QT,mmm
  • 免费做长图网站商城源码价格低 质量好
  • YOLOv1/v2
  • 算法专题十二:二叉树的深搜
  • 建设旅游信息网站的好处职业学院网站建设
  • 【vue】设置时间格式
  • 泰安网站建设方案为网站做一则广告
  • 23种设计模式——状态模式(State Pattern)
  • 管理系统布局框架中都包含哪些要素?导航、面包屑、tab等
  • 制作企业网站的app如何做网校网站
  • 卷积值提取
  • [Android] Alarm Clock Pro 11.1.0一款经典简约个性的时钟
  • 【机器学习算法篇】K-近邻算法