闲话WinFrom与WPF(3) 控件篇——CheckedListBox

本文探讨如何在WinForm和WPF中实现CheckedListBox功能。WinForm实现相对死板,依赖ItemCheck事件,而WPF可通过自定义样式轻松达成。作者指出WPF的灵活性可能导致多种实现方法,鼓励开发者不断探索更好的解决方案。
摘要由CSDN通过智能技术生成

我曾经写过一个筛选的Demo,里面有一个列表选择控件:

列表选择

这次只是说一个全选功能。
我曾经以为应该有更优雅的方式去实现全选功能,即使到现在我还是没有找到,有时候人们会告诉你不要对一个问题过于纠结,只要实现了功能就成,但是程序员往往不是这么想。
当我开始再一次用WinForm实现这个功能时,发现还是只能使用原来的方法,没有更好的方案去做这个。这要说还是由于WinForm过于死板,无法如WPF一般简单的实现自定义。
鉴于此Demo为本系列文章的第一篇WPF的Demo,这里尽量说的自己感觉易懂,仅仅展示重写模板的一些问题。

原文地址:http://nanqi.info/blog/2013/03/31/winform-wpf-3/

WinForm中的实现方案


代码几乎与那个筛选的Demo没有改变多少,唯一不同的是我发现其实不必自己去控制CheckedBox的选择(AutoCheck),同时也发现其实自己当时做的也没有错,因为如果当CheckedBox的CheckState属性为indeterminate时,想让再点一次让其选中,那么还必须我这么做(其实也从侧面反应,自己不止实现多余,而且做错了)。
我依旧使用CheckedListBox的ItemCheck事件,代码如下:

在Windows Form应用程序中使用WPF(Windows Presentation Foundation)控件,通常需要借助一些技术桥接,因为WinForms和WPF是基于不同的框架和运行环境。以下是一些步骤: 1. **NuGet包安装**: 首先,你需要安装Microsoft.WindowsDesktop.App或Microsoft.Net.WindowsRuntime.CoreLibraries NuGet包,以便支持WPFWinForm项目中的集成。 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、付费专栏及课程。

余额充值