2011年5月11日水曜日

IActivityTemplateFactory による カスタムアクティビティの統合

純粋に一つの処理を行うカスタムアクティビティは今までにも何度か作成したように非常に簡単です。ですが実際に利用する側となると、単一処理なアクティビティばかりでは、何度もデザイナ上に配置する必要が生じてしまい使いにくいものとなります。
そのような場面では IActivityTemplateFactory インターフェースを継承したクラスを用意し、デザイナにドロップした際に複数アクティビティを自動で展開させる事が可能です。

1: Imports System.Activities
2: Imports System.Activities.Presentation
3: Imports System.Activities.Statements
4: 
5: Public Class TestActivityFactory
6:     Implements IActivityTemplateFactory
7: 
8:     Public Function Create(target As System.Windows.DependencyObject) As System.Activities.Activity Implements System.Activities.Presentation.IActivityTemplateFactory.Create
9:         Dim resultActivity As New Sequence With {.DisplayName = "一連の操作"}
10:         '内部のアクティビティを追加
11:         Dim childActivity1 As New Delay With {.DisplayName = "少し待機", .Duration = New TimeSpan(0, 0, 5)}
12:         Dim childActivity2 As New WriteLine With {.DisplayName = "文字を表示", .Text = "待機しました!"}
13:         resultActivity.Activities.Add(childActivity1)
14:         resultActivity.Activities.Add(childActivity2)
15:         '変数の追加
16:         resultActivity.Variables.Add(New Variable(Of String)("追加する変数"))
17:         resultActivity.Variables.Add(New Variable(Of String)("追加する変数2", "初期値"))
18: 
19:         Return resultActivity
20:     End Function
21: 
22: End Class
上記サンプルは、ドロップした際に Sequence アクティビティを作成し、その内部に Delay アクティビティと WriteLine アクティビティを作成するものとなっています。同時に Sequence アクティビティの変数を二つ作成しています。
ActivityTemplateFactory
このように自動で複数のアクティビティや変数を作成できますので、固定的な設定などを自動化する事が可能です。

0 件のコメント:

コメントを投稿