最近在运用工作流设计器时遇到一个问题,客户在选择工作流中的一个活动时需要高亮显示,而不仅是有选择句柄。问题好像很简单,活动的颜色控制最简单的控制方式是由ActivityDesignerTheme来控制的,当然你也可以在Designer中的OnPaint方法中进行手工绘制,但我是不喜欢这样去劳心的:)。
在Designer.的OnPaint方法中,我对Designer的样式进行了操作。Designer的DesignerTheme属性可以直接取得设计样式,然后我对其中的BackColorStart和BackColorEnd进行了赋值,在满怀期待中运行……。但系统给出了一个异常,内容为:“Theme properties can only be changed in the Theme Configuration Dialog.”;那么创建一个新的Theme给Designer如何?答案是不可以的,因为DesignerTheme属性是只读的。这种利用Theme来改变外观的方式好像是行不通的,但我并没有放弃。
我仔细看了一下Theme中的成员列表,发现了GetBackgroundBrush方法,这将得到一个System.Drawing.Drawing2D.LinearGradientBrush类型的刷子。可不可以对刷子的颜色进行改变呢?我做了一下尝试,对刷子的LinearColors进行了赋值,运行。结果是令人兴奋的!
另一个还未解决的问题是判定活动是否被选择,这个很简单,在Designer中有个属性IsSelected,在Designer中的OnPaint中判断一下就可以了。
有关Rehosting WWF Designer的文章请参阅我的另外几篇文章:
WWF的一些技术细节与应用体会(一)
WWF的一些技术细节与应用体会(二)
Rehosting WWF 设计器 之运行时定制活动的外观
Rehosting WWF Designer 之定制活动的外观
Rehosting WWF Designerp之从工具箱拖动活动到设计器上
Rehosting WWF 设计器