WPF界面设计技巧(8)—自制山寨版CheckListBox

简介:

 

 

近年来IT市场山寨横行啊,我们今天也来发扬一下山寨精神,搞个自制的CheckListBox出来。

 

喏,CheckListBox 就是下面这玩意啦:

 

 

 

为什么要搞它?我们是山寨耶,说搞谁就搞谁!

 

我也不知道为什么,WPF里没有提供 CheckListBox 控件,但凭借WPF强大的外观定制能力,我们可以轻松的创制一个自己的 CheckListBox 

 

CheckListBox 的基本功能其实和 ListBox 没有太大出入,只要将普通的ListBox 的选择模式设为多选,它就能基本实现 CheckListBox 的功用了,只不过从用户角度来说,它的使用方式不如 CheckListBox 看起来那么明确而已。

 

我们接下来就仅仅采用外观修改的方法,将 ListBox  CheckBox 拼插,打造出无敌山寨版 CheckListBox 

 

首先在窗体设计器中建立一个ListBox,并为之填入一些内容项:

 

 

 

然后我们把第四讲时的列表样式代码COPYApp.xaml里去:

 

 

ContractedBlock.gif Code

 

修改 ContentPresenter 元素处的代码,用一个 CheckBox 将其包起来:

 

 

 

 

 

< CheckBox  Margin ="2,0,0,0"  VerticalAlignment ="Center"  IsChecked =" {Binding RelativeSource={RelativeSource TemplatedParent},Path=IsSelected,Mode=TwoWay} " >
  
< ContentPresenter  Margin ="2" />
</ CheckBox >

 

 

从上面的代码我们可以看到,CheckBox  IsChecked 属性双向绑定到了列表项的 IsSelected 属性上,这时勾选 CheckBox 就会使列表项被选中,反之亦然,这就是模拟 CheckListBox 的技术核心所在。

 

现在我们的界面是这个样子了:

 

 

 

再完成最后一步,修改 ListBox 的选取模式为多选:

 

 

 

OK,运行一下就是这样了:

 

 

 

简直和真的一样!

 

如何通过代码获取选定的项呢?这样就可以了:listBox1.SelectedItems

 

再附送一个小经验:当你程序运行后,在窗体的“Initialized”事件中自动从配置文件读取到数据,并将之绑定到 ListBox 后,想要将其默认设为全选的话,应当在窗体的“ContentRendered”事件中执行全选命令“listBox1.SelectAll()”,在“Loaded”、“Initialized”等事件中执行均无效,推测可能是控件载入到绑定数据之间会存在一定延迟。

 

最后是广告:本大寨主征押寨夫人数名,名额无限,先到为大。

 

源代码下载

本文转自斯克迪亚博客园博客,原文链接http://www.cnblogs.com/SkyD/archive/2008/07/23/1249950.html,如需转载请自行联系原作者

相关文章
|
7天前
|
开发者 C# UED
WPF与多媒体:解锁音频视频播放新姿势——从界面设计到代码实践,全方位教你如何在WPF应用中集成流畅的多媒体功能
【8月更文挑战第31天】本文以随笔形式介绍了如何在WPF应用中集成音频和视频播放功能。通过使用MediaElement控件,开发者能轻松创建多媒体应用程序。文章详细展示了从创建WPF项目到设计UI及实现媒体控制逻辑的过程,并提供了完整的示例代码。此外,还介绍了如何添加进度条等额外功能以增强用户体验。希望本文能为WPF开发者提供实用的技术指导与灵感。
14 0
|
7天前
|
存储 开发者 C#
WPF与邮件发送:教你如何在Windows Presentation Foundation应用中无缝集成电子邮件功能——从界面设计到代码实现,全面解析邮件发送的每一个细节密武器!
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中集成电子邮件发送功能,详细介绍了从创建WPF项目到设计用户界面的全过程,并通过具体示例代码展示了如何使用`System.Net.Mail`命名空间中的`SmtpClient`和`MailMessage`类来实现邮件发送逻辑。文章还强调了安全性和错误处理的重要性,提供了实用的异常捕获代码片段,旨在帮助WPF开发者更好地掌握邮件发送技术,提升应用程序的功能性与用户体验。
15 0