0

アプリケーションに再ホストされたデザイナーがあり、カスタム アクティビティですべて問題なく動作しています。ユーザーがワークフローを設計しているとき、通常と同じように、特定のアクティビティをデザイナー サーフェイスにドラッグします。ただし、ユーザーが (デザイナーではなく) ドロップダウン ボックスから特定の値を選択した後、特定のアクティビティをデザイン サーフェイスから削除して、保存および実行できないようにしたいと考えています。

WorkflowInspectionServices オブジェクトを使用して ModelItemTree をナビゲートし、親 Sequence アクティビティを取得し、アクティビティ コレクションからカスタム アクティビティを削除するなど、さまざまな方法を試しましたが、うまくいかないようです。

コードで再ホストされたデザイナー サーフェスからアクティビティを正常に削除した人はいますか (右クリックして [削除] を選択するだけではありません!!)。

明確にするために...これは、ワークフローが実行されているときではなく、再ホストされたデザイナーで設計されているときです。

4

1 に答える 1

1

ModelItem から子を削除するのではなく、ModelItem がラップするアクティビティ ツリーから削除することは間違いありません。つまり、「GetCurrentValue」を実行し、戻り値を Activity タイプにキャストしてから、その方法で子を削除します。アクティビティ ツリーの ModelItem 表現が同期しなくなるため、これは機能しません。子を保持するプロパティの 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);
    }
}
于 2012-04-17T16:51:49.657 に答える