[翻译]再论下拉框控件

threenewbee threenewbee 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
[翻译]再论下拉框控件

不时回头重新审视旧的代码是一个好注意。随着时间的推移来增长知识和获得新技巧,从我之前写的两个自定义Windows窗体控件的经历中,我体会到的确如此。你可能还记得我的ComboBox控件分组的支持,以及带有TreeView的下拉组合框——我要用我在缓冲绘图API中学习到的经验和思想来重新审视这些控件。



GroupedComboBox

这个控件扩展了ComboBox控件,并增加了一个新的属性:GroupMember。使用PropertyDescriptor并且自绘,它可以对分组值相等的项目进行分组。

新增功能:

 在Windows Vista和Windows 7下,使用DropDownList模式,控件并没有以传统的ComboBox控件的“按钮样式”呈现,这是自绘控件的限制,但通过使用VisualStyleRenderer可以克服。在这种模式下可以用一个精巧的Hack来预设ComboBox的外观,但这个功能只适用于OS被识别为Vista或Windows7。
 这个控件与其它的ComboBox控件是不一致的,因为它的下拉缺乏动画过渡。通过使用我编写的BufferedPainter<T>类,可以很容易地实现缓冲动画。

ComboTreeBox

ComboTreeBox控件是完全从头开始开发的(即它的基类是Control类),它使用一个层次/树型结构数据表示(而不是一个平坦的列表)。因此,它与组合框和TreeView具有一致的行为。控件的下拉部分是通过使用ToolStripDropDown,位图缓存和自定义渲染来实现的。

新增功能:

 类似于GroupedComboBox,控件没有使用Windows Vista/7风格的外观。因为控件没有可编辑的部分完全是自绘的,所以很容易在相应的操作系统中模拟对应的外观。在XP中,它使用默认的视觉样式。当主题被禁用时,它使用经典样式。
 控件不支持动画。BufferedPainter<T>再次被用于实现动画。
 由于强类型引用它的设计器类,以前的控件在.NET框架库的“Client Profile”版本中不能使用。为此,我用我自定义的设计器取代了DomainUpDown控件使用的内置的设计器——它可以有效控制控件的高度并且避免引用System.Design程序集(只包含在完整版本的框架库中)。
 对项的绘制的小调整,只针对在Windows中启用在焦点控件周围绘制虚框的功能。

下载

DropDownControlsUpdated.zip(Visual Studio 2010解决方案,.NET Framework 4 Client Profile)

注:本文翻译自 http://www.brad-smith.info/blog/archives/477,作者是Bradley Smith。
...全文

相关推荐

评论 131
收藏 已收藏
分享
返回顶部
threenewbee
C# 111,128 成员 642,536 内容