这篇文章的意图:
我意识到 Workflow Foundation 在 StackOverflow 上并不是很受欢迎,而且可能不会有很多答案,或者根本没有。这篇文章旨在为尝试通过自定义设计器类自定义工作流活动外观的人们提供资源。
目标:
我正在尝试为工作流活动创建一个自定义设计器类,以实现以下目标:
让活动看起来不那么技术性。例如,我不一定希望将内部对象名称视为活动的“标题”——相反,我希望看到更具描述性的内容。
在标题文本下方显示某些属性的值。我想直接在标题下方查看一些属性的值,这样我就不需要查看其他地方(即在“属性”窗口中)。
提供自定义放置区域并绘制自定义内部箭头。例如,我希望能够在非常特定的地方拥有自定义放置区域。
到目前为止我发现了什么:
我创建了一个自定义设计器类,其派生SequentialActivityDesigner
如下:
[Designer(typeof(SomeDesigner))]
public partial class SomeActivity: CompositeActivity
{
...
}
class PlainDesigner : SequentialActivityDesigner
{
...
}
通过重写一些属性和OnPaint
方法,我发现了以下属性之间的对应关系以及活动将如何显示:
图 1. an 的某些属性SequentialActivityDesigner
与显示的活动之间的关系。
目标 #1(使活动看起来不那么技术性)和目标 #2(在标题文本下方显示属性值)的可能解决方案:
显示的标题可以通过
Title
属性进行更改。如果需要更多空间来显示标题下方的附加信息,则
TitleHeight
可以增加属性(即,覆盖属性并使其返回base.TitleHeight + n
,其中n
是某个正整数)。覆盖该
OnPaint
方法并在通过 . 保留的区域中绘制附加文本TitleHeight
。
开放式问题:
连接器、连接件和连接点是做什么用的?它们似乎是必要的,但目的是什么?
虽然可以通过该
GetDropTargets
方法获得放置目标,但这似乎不一定是设计人员实际放置放置活动的位置。当一个活动被拖过工作流时,设计器会显示一些绿色的加号,可以删除活动;它如何确定这些加号的位置?设计师如何确定在哪里绘制连接线和箭头?