日期:2014-05-17  浏览次数:21119 次

[翻译]再论下拉框控件
[翻译]再论下拉框控件

不时回头重新审视旧的代码是一个好注意。随着时间的推移来增长知识和获得新技巧,从我之前写的两个自定义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。

------解决方案--------------------
原来是翻译的啊



------解决方案--------------------

在WPF中,ComboTreeBox这样的WinForm控件直接拿标准的ComboBox配上适合的Style和ControlTemplate就实现了。
------解决方案--------------------
必须支持...
------解决方案--------------------
先支持下
------解决方案--------------------
探讨

原来是翻译的啊

------解决方案--------------------
感谢楼主分享!
------解决方案--------------------
谢谢翻译分享