【问题标题】:Remove Activities from reshosted designer surface从重新托管的设计器表面中删除活动
【发布时间】:2012-04-17 12:33:53
【问题描述】:

我的应用程序中有一个重新托管的设计器,它与我的自定义活动都可以正常工作。当用户设计他们的工作流程时,他们会像往常一样将某些活动拖到设计器表面。但是,在用户从下拉框中(不在设计器中)选择某些值后,我想从设计图面上删除某些活动,这样它们就无法保存和执行。

我已经尝试了很多不同的方法来做到这一点,使用 WorkflowInspectionServices 对象来导航 ModelItemTree,获取父序列活动并从它的活动集合中删除自定义活动,但我似乎无法让它工作。

有没有人真的成功地从代码中重新托管的设计器表面中删除了一个活动(不仅仅是右键单击它并选择删除!!)。

要明确...这不是在执行工作流时,而是在重新托管的设计器中进行设计时。

【问题讨论】:

  • 我敢打赌,您不会从 ModelItem 中删除子项,而是从 ModelItem 包装的 Activity 树中删除。即,您执行“GetCurrentValue”,将返回值转换为您的 Activity 类型,然后以这种方式删除子项。那是行不通的,因为 Activity 树的 ModelItem 表示将不同步。您必须通过获取包含子项的属性的 ModelItem 来删除子项,然后将其清除。
  • 您好。感谢那。你是对的,这正是我正在做的。我确切地知道你来自哪里,但只是不知道如何实际做到这一点。这是否意味着我可以从需要清除的父活动(序列?)中获取 ModelItem?抱歉,对这一切都很陌生...
  • 让我看看我是否可以编写一些代码,我会回答的。

标签: workflow-foundation-4 workflow-rehosting


【解决方案1】:

我敢打赌,您不会从 ModelItem 中删除子项,而是从 ModelItem 包装的 Activity 树中删除。即,您执行“GetCurrentValue”,将返回值转换为您的 Activity 类型,然后以这种方式删除子项。那是行不通的,as the ModelItem representation of the Activity tree will get out of sync. 您必须通过获取包含子项的属性的 ModelItem 来删除子项,然后将其清除。

例如,给定以下活动

[Designer(typeof(NativeActivity1Designer))]
public sealed class NativeActivity1 : NativeActivity, IActivityTemplateFactory
{
    public Activity Child { get; set; }

    protected override void Execute(NativeActivityContext context) { }

    Activity IActivityTemplateFactory.Create(System.Windows.DependencyObject target)
    {
        return new NativeActivity1
        {
            Child = new Sequence()
        };
    }
}

以及以下设计器(为简洁起见,移除了 ActivityDesigner 节点)

<StackPanel>
    <sap:WorkflowItemPresenter
        MinHeight="100"
        HintText="Drop it here"
        Item="{Binding ModelItem.Child}" />
    <Button
        Content="Remove"
        Click="Button_Click" />
</StackPanel>

您可以使用Button_Click 中的代码从设计器的工作流程中移除子项。

public partial class NativeActivity1Designer
{
    public NativeActivity1Designer()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {

        ModelProperty child = ModelItem.Properties["Child"];
        child.SetValue(null);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多