これは可能ですか?WFアクティビティパックがあるのでMS用であることは知っていますが、どのように行われるのかわかりません。他のアクティビティやボタンなどを挿入するために、Bodyブロックを使用したアクティビティを用意できると便利です。それほど面倒ではない場合や時間のかかる場合はそうです。
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()
};
}
}
いくつかの点に注意してください。子を保持するためにActivityDelegateタイプを使用します。次に、IActivityTemplateFactoryを実装して、デザイナーのアクティビティを構成します。コンストラクターで設定するよりも、これを行う方が常に優れています/安定しています。デリゲートのプロパティにバインドするため、インスタンスを設定する必要があります。そうしないと、バインディングが失敗します。
私たちが実行するとき、あなたがしなければならないのは、適切なときにあなたの子供をスケジュールして戻ることだけです。もちろん、ブロックするべきではありません。
次に、デザイナーで、次のように子にバインドします。
<sap:WorkflowItemPresenter
HintText="Add children here!"
Item="{Binding Path=ModelItem.Child.Handler}" />
BruceBukovicsによる.Net4の本のProWF:WindowsWorkflowにも多くの例があります。あなたはそれをチェックしたいかもしれません。
CodeActivityではなくNativeActivityから始める必要があります。NativeActivityを使用すると、実行コンテキストを通じて子アクティビティをスケジュールできます。NativeActivityのテンプレートはありません。代わりに、クラスを作成してNativeActivityから派生します。