自定义ProgressBar控件[豪华版]

介绍

我很痴迷与进度条,对于这种痴迷我也无法解释。多年来,我一看见喜欢的进度条,我就尝试这在C#中重新实现他们为我所用。这导致了一些具体的实现都共享一个相对较小的功能集合(继承单一的父类)z之后不久,我又看见几个进度条,想要实现它们,但是我不想从底层在重新来一遍。然而,我发现他没有很多共同的特定。后来,我终于明白了,我可以创建几个适用于所有示例的一个可插拔的组件。该项目就是这个设想的结果。


组件结构

基本上,我们的想法是这样地有两个具体实现的进度条(一个正常的,一个是重新创建的类似与WinRar的双进度条),每一个都在更一般的基础上实现。这些实现使用IProgressBackgroundPainter 的实现绘制背景,使用IProgressPainterIProgressBorderPainter 的实现绘制边框,然后你还可以使用IGlossPainter 的实现来修饰你的进度条或背景。IProgressPainter 也可以使用它自己的IProgressBorderPainterIProgressPainter IGlossPainter 提供了一些基本功能的抽象描述。 ChainedGlossPainter, IGlossPainter具体实现,他是一个装饰类,允许你组合多个 IGlossPainter 的效果。

你可以将这些功能组件拖拽到类视图设计界面。在类视图设置它们的关系和属性。这样可以根据自己的需求很方便的实验不同的可能性。下面是一个进度条的实现,接口和他们的实现的类图:

 

所有的进度条都有一些基本的属性,例如:(i.e., Maximum, Minimum, Value). 还有ShowPercentage属性,这是一个boolean值,用来确定是否在进度栏上显示百分比。 ProgressPadding 属性表示进度条和边框之间的距离(像素),这是一个int类型的值。 DualProgressBar 增加了MasterMaximum, MasterValue, MasterPainter, and PaintMasterFirst 属性用来控制主进度。 DualProgressBar 类似于WinRar的进度条,一个代表总压缩进度,一个表示当前的进度。

 

进度条背景绘制

5个类实现自接口 IProgressBackgroundPainter, 其中3个实现了特定的Process Bar (WinRar, FruityLoops, and Candy Cane).

 

The Plain Background Painter

PlainBackgroundPainter 只是简单的绘制单色的背景。它还继承了接口IGlossPainter 所以它还可以增加其它的修饰。

The Gradient Background Painter

GradientBackgroundPainter 用与装饰,它允许你指定一个顶部和底部的颜色,并用这两种颜色之间的渐变填充背景。 PlainBackgroundPainter GradientGlossPainter也可以达到同样的效果, 使用这些来绘制背景非常的方便.

 

The Candy Cane Background Painter

 

CandyCaneBackgroundPainter 是从现有的进度条背景集合创建一个进度条的背景。它基本上重新实现了 PlainBackgroundPainter glosses. 匹配 CandyCaneProgressPainter, 并且它可以和任何其他进度绘制类一起工作。

 

 

The FruityLoops Background Painter

FruityLoopsBackgroundPainter 内置了一个进度条背景,我这是基于在FruityLoops应用程序的进度条。 它有一个对应的progress painter. 这个背景 painter 也不是可配置的, 它是专门用来模拟 FruityLoops 样式的进度条.


 

The WinRar Background Painter

RarBackgroundPainter 是创建一个类似WinRar的进度条风格. 它也可以使用 progress border painters, RarProgressBar类里。 但是它是专门为仿造WinRar进度条而定制的,所有没有多少可以配置的东西,而且,不允许你改变它的颜色。例如:

 

 

进度条的绘制

IProgressPainter9个实现。 其中大部分都是我之前搜集的进度条。 它们也可以在修改样式,但默认的是使用公共的画布和修饰。

 

The Plain Progress Painter

PlainProgressPainter类为Color属性指定一个颜色颜色实现背景填充。除了Color 属性, 你还可以设置LeadingEdge 属性。 如果不设置 ProgressPadding 的值, 你将获得在父类中的ProgressBorderPainter 属性设置的效果,它是一个IProgressBorderPainter接口的实例。



 

 

The Beveled Painter

BevelledProgressPainter 也是使用单色绘制进度条颜色, 但是它实现了边框和进度条颜色的过度. 由于实现了IProgressPainter IProgressBorderPainter 接口, 所以 ProgressBorderPainter 类的属性对它都有效果.

 

 

The Beveled Gradient Painter(渐变填充)

BevelledGradientProgressPainter 基本和 BevelledProgressPainter 相同,使用MinColor MaxColor 属性来定义渐变的颜色的区间。

 

 

The Metal Progress Painter(金属色)

MetalProgressPainter 是一个微妙而优雅的定制设计,使用单一的颜色绘制进度条。





 

The Barber Pole

BarberPoleProgressPainter 是另一个自定义绘制.


 

A Java Painter

JavaProgressPainter 这是一个类似与Java应用程序的进度条设计。



 

The Candy Cane

CandyCaneProgressPainter 绘制基于一种颜色部分透明效果的进度条。



 

The FruityLoops Painter

FruityLoopsProgressPainter 根据两个属性 DoubleLayer and TripleLayer 来绘制进度条。



 

The WinRar Progress Painter

RarProgressPainter 是一个非常简单的进度绘制. 它使用 RarBackgroundPainter RarBorderPainter来完成。ProgressType 定义两种颜色供WinRar进度条使用, Silver Gold ShowEdge 属性指定是否绘制一个边缘。




更多内容参考:http://dev.mjxy.cn/a-Custom-ProgressBar-Control.aspx

posted @ 2011-07-25 17:42  敏捷学院  阅读(1190)  评论(1编辑  收藏  举报