디자이너 다시 호스트는 사용자 지정 애플리케이션 내에서 워크플로 디자인 캔버스를 호스팅하는 일반적인 시나리오입니다. 대부분의 사람들이 잘 알고 있는 호스팅 애플리케이션은 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