다음을 통해 공유


디자이너 리호스팅

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

다음으로 샘플은 디자이너를 만들고, 그것의 주요 ViewPropertyInspectorView를 사용자 인터페이스의 적절한 컨테이너와 연결합니다. 다음 예제에는 설명이 필요한 몇 가지 추가 코드 줄이 있습니다. 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>

샘플 사용

  1. Visual Studio에서 DesignerRehosting.sln 솔루션을 엽니다.

  2. F5 키를 눌러 애플리케이션을 컴파일하고 실행합니다.

  3. WPF 애플리케이션은 재호스팅된 디자이너로 시작합니다.