2011年4月5日火曜日

WorkflowDesigner.Save で保存できない Activity

ここしばらくずーっと悩んでいたのが ForEach アクティビティが簡易デザイナーで保存した際に正しく保存できなかった現象。色々調べてみると大元で勘違いしていたのが判明。

  • ForEach<T> アクティビティ
  • ParallelForEach<T> アクティビティ
  • Pick アクティビティ

今のところこの3種類のアクティビティは、ツールボックスに登録しデザイナにドロップするために利用するものが別でした。ツールボックス自体は通常の ForEach<T> アクティビティをセットして、デザイナにドロップするところまでは何の問題もないんだけど、xamlに保存しようとすると保存されない現象が発生します。対応策、というより正しくはこのようになります。

  • ForEachWithBodyFactory<T>
  • ParallelForEachWithBodyFactory<T>
  • PickWithTwoBranchesFactory

名前空間 System.Activities.Core.Presentation.Factories に属するこれらのアクティビティを利用する事で、正しく保存ができるようになります。

<ForEach x:TypeArguments="x:String" sap:VirtualizedContainerService.HintSize="614,211">
  <ActivityAction x:TypeArguments="x:String">
    <ActivityAction.Argument>
      <DelegateInArgument x:TypeArguments="x:String" Name="item" />
    </ActivityAction.Argument>
    <wc:DisplayActivity Text="{x:Null}" sap:VirtualizedContainerService.HintSize="261,100" />
  </ActivityAction>
</ForEach>

保存した際の xaml は上記のようになります。ツールボックスに ForEach<T> アクティビティを利用していた場合には、ActivityAction 以下の子要素が全て保存されませんでした。

0 件のコメント:

コメントを投稿