デザイナーのリホストは、カスタム アプリケーション内でのワークフロー デザイン キャンバスのホストを指す一般的なシナリオです。 ほとんどのユーザーが使い慣れているホスティング アプリケーションは Visual Studio ですが、アプリケーションでワークフロー デザイナーを表示すると便利なシナリオがいくつかあります。
アプリケーションの監視 (エンド ユーザーがプロセスを視覚化できるだけでなく、現在アクティブな状態、実行時間データの集計、ワークフローのインスタンスに関するその他の情報など、プロセスに関するランタイム データも視覚化できます)。
ユーザーが限られた一連のアクティビティを使用してプロセスをカスタマイズできるようにするアプリケーション。
これらの種類のアプリケーションをサポートするために、ワークフロー デザイナーは .NET Framework 内に付属しており、WPF アプリケーション内、または適切な WPF ホスティング コードを使用して WinForms アプリケーションでホストできます。 DesignerRehosting サンプルでは、次の例を示します。
WF デザイナーを再ホストする。
再ホストされたツールボックスとプロパティ グリッドも使用します。
デザイナーのリホスト
このサンプルでは、次のグリッド レイアウトに示されているデザイナーを含む WPF レイアウトを作成する方法を示します (領域の問題についてはツールボックス コードは省略されています)。 デザイナーとプロパティ グリッドを含む罫線の名前をメモします。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="7*"/>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0">
<sapt:ToolboxControl>...</sapt:ToolboxControl>
</Border>
<Border Grid.Column="1" Name="DesignerBorder"/>
<Border Grid.Column="2" Name="PropertyBorder"/>
</Grid>
次に、デザイナーを作成し、そのプライマリ View と PropertyInspectorView をユーザー インターフェイスの適切なコンテナーに関連付けます。 次の例には、いくつかの説明にメリットがある追加のコード行がいくつかあります。 Register呼び出しは、.NET Framework に付属するアクティビティの既定のアクティビティ デザイナーを関連付けるために必要です。 Load は、編集する WF 項目を渡すために呼び出されます。 最後に、 View (プライマリ キャンバス) と PropertyInspectorView (プロパティ グリッド) がユーザー インターフェイスサーフェイスに配置されます。
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
// register metadata
(new DesignerMetadata()).Register();
// create the workflow designer
WorkflowDesigner wd = new WorkflowDesigner();
wd.Load(new Sequence());
DesignerBorder.Child = wd.View;
PropertyBorder.Child = wd.PropertyInspectorView;
}
再ホストされたツールボックスの使用
このサンプルでは、XAML で宣言によって再ホストされたツールボックス コントロールを使用します。 コードでは、型を ToolboxItemWrapper コンストラクターに渡すことができることに注意してください。
<!-- Copyright (c) Microsoft Corporation. All rights reserved-->
<Window x:Class="Microsoft.Samples.DesignerRehosting.RehostingWfDesigner"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sapt="clr-namespace:System.Activities.Presentation.Toolbox;assembly=System.Activities.Presentation"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="Window1" Height="600" Width="900">
<Window.Resources>
<sys:String x:Key="AssemblyName">System.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</sys:String>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="7*"/>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0">
<sapt:ToolboxControl>
<sapt:ToolboxCategory CategoryName="Basic">
<sapt:ToolboxItemWrapper AssemblyName="{StaticResource AssemblyName}" >
<sapt:ToolboxItemWrapper.ToolName>
System.Activities.Statements.Sequence
</sapt:ToolboxItemWrapper.ToolName>
</sapt:ToolboxItemWrapper>
<sapt:ToolboxItemWrapper AssemblyName="{StaticResource AssemblyName}">
<sapt:ToolboxItemWrapper.ToolName>
System.Activities.Statements.WriteLine
</sapt:ToolboxItemWrapper.ToolName>
</sapt:ToolboxItemWrapper>
<sapt:ToolboxItemWrapper AssemblyName="{StaticResource AssemblyName}">
<sapt:ToolboxItemWrapper.ToolName>
System.Activities.Statements.If
</sapt:ToolboxItemWrapper.ToolName>
</sapt:ToolboxItemWrapper>
<sapt:ToolboxItemWrapper AssemblyName="{StaticResource AssemblyName}">
<sapt:ToolboxItemWrapper.ToolName>
System.Activities.Statements.While
</sapt:ToolboxItemWrapper.ToolName>
</sapt:ToolboxItemWrapper>
</sapt:ToolboxCategory>
</sapt:ToolboxControl>
</Border>
<Border Grid.Column="1" Name="DesignerBorder"/>
<Border Grid.Column="2" Name="PropertyBorder"/>
</Grid>
</Window>
サンプルの使用
Visual Studio で DesignerRehosting.sln ソリューションを開きます。
F5 キーを押して、アプリケーションをコンパイルして実行します。
WPF アプリケーションは、再ホストされたデザイナーで始まります。
.NET