这可能吗?我知道它适用于 MS,因为他们有 WF 活动包,但我不确定它是如何完成的。如果能够使用带有 Body 块的活动来插入其他活动、按钮等,那就太好了。如果不是太多麻烦和/或耗时的话。
问问题
3380 次
3 回答
3
如果您遵循一些规则,它就很容易了。下面是一个具有孩子的 NativeActivity 的示例:
[Designer(typeof(MyActivityDesigner)), ContentProperty("Child")]
public sealed class MyActivity :
NativeActivity, IActivityTemplateFactory
{
// this "activity delegate" holds our child activity
public ActivityAction Child { get; set; }
// may be necessary to do this
protected override void
CacheMetadata(NativeActivityMetadata metadata)
{
metadata.AddDelegate(Child);
}
protected override void
Execute(NativeActivityContext context)
{
// do some work here, then
context.ScheduleAction(Child);
}
// better to use a template factory than a constructor to do this!
Activity IActivityTemplateFactory
.Create(System.Windows.DependencyObject target)
{
return new MyActivity
{
// HAVE to have this set, or it fails in the designer!
Child = new ActivityAction()
};
}
}
注意几点:我们使用 Activity Delegate 类型来持有我们的孩子。其次,我们实现 IActivityTemplateFactory 来为设计器配置我们的活动。这样做总是比在构造函数中设置东西更好/更稳定。我们将绑定到委托的一个属性,所以我们必须设置一个实例;否则绑定会失败。
当我们执行时,您所要做的就是在适当的时候安排您的孩子并返回。当然,您不应该阻止。
然后,在设计器中,您将像这样绑定到 Child:
<sap:WorkflowItemPresenter
HintText="Add children here!"
Item="{Binding Path=ModelItem.Child.Handler}" />
于 2010-07-22T16:49:28.363 回答
2
Bruce Bukovics 所著的 Pro WF : Windows Workflow in .Net 4 书中也有很多示例。你可能想检查一下。
于 2010-07-27T13:52:27.470 回答
0
您需要从 NativeActivity 而不是 CodeActivity 开始。NativeActivity 允许您通过其执行上下文安排子活动。NativeActivity 没有模板,您只需创建一个类并从 NativeActivity 派生。
于 2010-06-23T20:29:31.693 回答