Workflow Foundation 3.5中的自定义活动设计者:它们如何工作?

时间:2010-04-25 09:51:36

标签: .net-3.5 workflow-foundation designer custom-activity

这篇文章的意图:

我意识到Workflow Foundation在StackOverflow上并不是非常受欢迎,并且可能没有多少答案,或者根本没有答案。本文旨在作为尝试通过自定义设计器类自定义工作流活动外观的人员的资源。


目标:

我正在尝试为Workflow活动创建一个自定义设计器类来实现以下目标:

  1. 让活动看起来不那么技术化。例如,我不一定希望将内部对象名称视为活动的“标题” - 相反,我希望看到更具描述性的东西。

  2. 在标题文字下方显示某些属性的值。我希望在标题下直接看到一些属性值,这样我就不需要查看其他位置(即,在“属性”窗口中)。

  3. 提供自定义放置区域并绘制自定义内部箭头。例如,我希望能够在非常具体的位置设置自定义放置区域。


  4. 到目前为止我发现了什么:

    我创建了一个源自SequentialActivityDesigner的自定义设计器类,如下所示:

    [Designer(typeof(SomeDesigner))]
    public partial class SomeActivity: CompositeActivity
    {
        ...
    }
    
    class PlainDesigner : SequentialActivityDesigner
    {
        ...
    }
    

    通过覆盖一些属性和OnPaint方法,我发现了属性之间的以下对应关系以及活动的显示方式:

    Diagram showing the relationships between some properties of a SequentialActivityDesigner and the displayed activity. http://img121.imageshack.us/img121/4230/activitydesigner.png
    图1。 SequentialActivityDesigner的某些属性与显示的活动之间的关系。

    目标#1的可能解决方案(使活动看起来不那么技术)和目标#2(在标题文字下显示属性的值

    • 可以通过Title属性更改显示的标题。

    • 如果需要更多空间来显示标题下方的其他信息,可以增加TitleHeight属性(即覆盖该属性并使其返回base.TitleHeight + n,其中{{1}是一些正整数)。

    • 覆盖n方法,并在OnPaint保留的区域内绘制其他文字。


    未解决的问题:

    • 用于连接器,连接和连接点的是什么?它们似乎是必要的,但出于何种目的?

    • 虽然可以通过TitleHeight方法获得放置目标,但似乎这不一定是设计者实际放置掉落活动的地方。当在工作流程中拖动某个活动时,设计人员会显示几个绿色加号,表示可以删除活动;它如何计算这些加号的位置?

    • 设计师如何确定绘制连接线和箭头的位置?

1 个答案:

答案 0 :(得分:2)

除非你有一个真正的,非常好的理由将大量金额(这将是大量)投入WF 3.5,否则不要。请改用WF4。 WF4使您可以更好地控制WPF使用Xaml呈现的活动的外观。

WF 3.5对用户来说非常技术性和非常可怕。 WF4旨在解决这些问题,这似乎符合您的目标。