WF4.5 でワークフロー中の構造を表示するアウトラインビューが提供されることは知っていたのですが、てっきり Visual Studio 上だけの話だとばかり思っていて華麗にスルーしていたところ、これはリホスティング環境でも普通に使えるシロモノだというのが判明したので実際に使ってみました。
ワークフローデザイナーを利用するのと同じく非常に簡単です。
1:<Windowx:Class="MainWindow"
2:xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3:xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4:Title="MainWindow"Height="350"Width="525"Loaded="Window_Loaded">
5:<Grid>
6:<Grid.ColumnDefinitions>
7:<ColumnDefinitionWidth="109*"/>
8:<ColumnDefinitionWidth="408*"/>
9:</Grid.ColumnDefinitions>
10:
11:<GridName="Grd"Grid.Column="1"></Grid>
12:<GridName="doc"Grid.Column="0"></Grid>
13:
14:</Grid>
15:</Window>
こんな xaml でメイン画面を用意したとして。
1:Imports System.Activities
2:Imports System.Activities.Presentation
3:Imports System.Activities.Statements
4:Imports System.Activities.Core.Presentation
5:
6:Class MainWindow
7:
8:PrivateSub Window_Loaded(sender AsObject, e As RoutedEventArgs)
9:Dim metadata AsNew DesignerMetadata
10: metadata.Register()
11:
12:Dim wd = New WorkflowDesigner
13: WorkflowDesignerIcons.UseWindowsStoreAppStyleIcons()
14: Grd.Children.Add(wd.View)
15:
16:Dim sq AsNew Sequence With {.DisplayName = "アイコンサンプル"}
17:Dim wl1 AsNew WriteLine With {.DisplayName = "出力する", .Text = "クマー"}
18:Dim wl2 AsNew WriteLine With {.DisplayName = "出力する", .Text = "ムッシュ"}
19:Dim wl3 AsNew WriteLine With {.DisplayName = "出力する", .Text = "名言"}
20: sq.Activities.Add(wl1)
21: sq.Activities.Add(wl2)
22: sq.Activities.Add(wl3)
23:
24: doc.Children.Add(wd.OutlineView)
25:
26: wd.Load(sq)
27:
28:EndSub
29:End Class
こんな感じにソースを書きます。WorkflowDesigner クラスで OutlineView プロパティが新たに追加され、これを特に何も考えずに表示させればそのまま連動した形で表示されます。
非常に簡単で、大きいワークフローを操作する際には有用ですので必須機能ですね。