3

这可能吗?我知道它适用于 MS,因为他们有 WF 活动包,但我不确定它是如何完成的。如果能够使用带有 Body 块的活动来插入其他活动、按钮等,那就太好了。如果不是太多麻烦和/或耗时的话。

4

3 回答 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 回答