最近在运用工作流设计器时遇到一个问题,客户在选择工作流中的一个活动时需要高亮显示,而不仅是有选择句柄。问题好像很简单,活动的颜色控制最简单的控制方式是由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的文章请参阅我的另外几篇文章:
  Rehosting WWF 设计器

相关文章:

  • 2021-12-26
  • 2022-02-19
  • 2021-07-24
  • 2022-12-23
  • 2021-10-08
  • 2021-05-23
猜你喜欢
  • 2021-09-02
  • 2021-07-19
  • 2022-02-20
  • 2021-09-01
  • 2021-06-06
  • 2021-05-09
相关资源
相似解决方案