Rehosting WWF 设计器 之运行时定制活动的外观

最近在运用工作流设计器时遇到一个问题,客户在选择工作流中的一个活动时需要高亮显示,而不仅是有选择句柄。问题好像很简单,活动的颜色控制最简单的控制方式是由ActivityDesignerTheme来控制的,当然你也可以在Designer中的OnPaint方法中进行手工绘制,但我是不喜欢这样去劳心的:)。

Designer.OnPaint方法中,我对Designer的样式进行了操作。DesignerDesignerTheme属性可以直接取得设计样式,然后我对其中的BackColorStartBackColorEnd进行了赋值,在满怀期待中运行……。但系统给出了一个异常,内容为:“Theme properties can only be changed in the Theme Configuration Dialog.”;那么创建一个新的ThemeDesigner如何?答案是不可以的,因为DesignerTheme属性是只读的。这种利用Theme来改变外观的方式好像是行不通的,但我并没有放弃。

我仔细看了一下Theme中的成员列表,发现了GetBackgroundBrush方法,这将得到一个System.Drawing.Drawing2D.LinearGradientBrush类型的刷子。可不可以对刷子的颜色进行改变呢?我做了一下尝试,对刷子的LinearColors进行了赋值,运行。结果是令人兴奋的!

另一个还未解决的问题是判定活动是否被选择,这个很简单,在Designer中有个属性IsSelected,在Designer中的OnPaint中判断一下就可以了。

总结,如果只是想在运行时改变样式,不能直接改变样式所提供的样式属性进行变更,我们可以通过获取样式提供的笔、刷子等与绘图相关的更底层的对象,然后对其进行相应的设置就可以了。对于字体而言,则需要在派生的Theme中对Font进行重新实现。因为工作忙碌的原因,其它的就自己试吧。
  有关Rehosting WWF Designer的文章请参阅我的另外几篇文章:
  WWF的一些技术细节与应用体会(一)
  WWF的一些技术细节与应用体会(二)
  Rehosting WWF 设计器 之运行时定制活动的外观
  Rehosting WWF Designer 之定制活动的外观
  
Rehosting WWF Designerp之从工具箱拖动活动到设计器上
  Rehosting WWF 设计器
posted on 2007-01-12 08:56  李学斌  阅读(4452)  评论(2编辑  收藏  举报