闲话WinFrom与WPF(2) 控件篇——ComboBox

本文探讨了WinForm和WPF中ComboBox控件的数据绑定、ToString重写、自动提示功能。通过实例展示了如何绑定数据源,如何重写ToString方法以自定义显示内容,以及在WPF中实现ComboBox的自动提示。对于自动提示,WPF提供了基本的定位功能,但实现筛选功能则需要更多定制工作。
摘要由CSDN通过智能技术生成

下拉框是一个很经典的控件,网上也有不少对于下拉框控件的扩展,其中包括与TreeView结合,做成树形选择;与DataGrid结合,做成列表选择;又或增加几个按钮来达到快捷编辑集合,选中项特殊显示等等。
对于复杂的组合控件,我这里就不必多说,只说说原生ComboBox的一些应用。

原文链接:http://nanqi.info/blog/2013/03/29/winform-wpf-2/

绑定数据源


简单的给Items添加项我就不说了,比如一些类型的选择多数使用这种,如一个员工的职位,是程序猿呢,还是项目经理。
但往往这种职位,是需要考虑扩展的,也就是说这个职位也要可维护的,所以一般的软件做法,在数据库中以字典表的形式去保存这类情况,而数据库设计中又有这么一个要求,每个表都要有不重复的ID做主键,所以经常看到如此的表结构:

GUID    varchar(50)
Name    varchar(50)
...


那么,将该数据展示在ComboBox中,可能就需要展示的是Name,而你只想获取选择的GUID。
所幸不管在WinForm还是WPF中,更或是在web开发中,即使纯Html的ComboBox,都有这种选择的一个值,而可能实际获得的是另一个值。
WinForm中指定DisplayMemberValueMember属性,WPF中指定DisplayMemberPathSelectedValuePath属性,可以很简单的实现上述要求。
而如果当这个字典表很大,或者客户需要给这种职位、类别之类的东西编号的时候,这时可能需要在显示的时候既显示编号,又显示名称,这时的表结构可能会这样:

GUID    varchar(50)
No      varchar(50)
Name    varchar(50)
...


如果不拘于形式而言,一般完全可以使用No替换GUID,不管怎样,现在就是想要既获得主键列的值,又想显示No + Name的形式。

重写ToString的一种实

在Windows Form应用程序中使用WPF(Windows Presentation Foundation)控件,通常需要借助一些技术桥接,因为WinForms和WPF是基于不同的框架和运行环境。以下是一些步骤: 1. **NuGet包安装**: 首先,你需要安装Microsoft.WindowsDesktop.App或Microsoft.Net.WindowsRuntime.CoreLibraries NuGet包,以便支持WPF在WinForm项目中的集成。 2. **启用Interop**: 在WinForms项目的属性页(Properties -> Application),勾选"Enable Windows Presentation Foundation (WPF) Desktop Com Interop"。这会启用必要的互操作层。 3. **引用WPF命名空间**: 在代码中引用`System.Windows.Controls`或`WindowsFormsIntegration`命名空间,这包含了用于在WinForms中显示WPF控件的类。 4. **创建WPF元素**: 使用WPF的XAML语法创建控件,然后实例化它。例如: ```csharp var wpfElement = new Label() { Content = "Hello, WPF!" }; ``` 5. **将WPF控件嵌入WinForms**: 将创建的WPF元素添加到WinForms中的一个Panel或其他合适的容器里,如: ```csharp WinformsPanel controlHost = new Panel(); controlHost.Children.Add(wpfElement); this.Controls.Add(controlHost); ``` 6. **处理事件和数据绑定**: 虽然WPF控件可以在WinForms中显示,但需要注意的是,你可能无法直接响应WPF的某些事件,需要通过依赖属性(Dependency Properties)或者借助Bridge类间接处理。 请注意,虽然WPF控件在WinForms中可以显示,但这并不是最推荐的做法,因为它可能会影响性能和维护性。如果可能的话,建议考虑完全采用WPF进行开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值