Partilhar via


Rehospedagem de Designer

A rehospedagem do designer é um cenário comum que se refere à hospedagem da tela de design do fluxo de trabalho dentro de um aplicativo personalizado. O aplicativo de hospedagem com o qual a maioria das pessoas está familiarizada é o Visual Studio, no entanto, há vários cenários em que mostrar o designer de fluxo de trabalho em um aplicativo pode ser útil:

  • Aplicativos de monitoramento (permitindo que um usuário final visualize o processo, bem como dados de tempo de execução sobre o processo, como o estado ativo no momento, dados agregados de tempo de execução ou outras informações sobre uma instância do fluxo de trabalho).

  • Aplicativos que permitem que um usuário personalize o processo com um conjunto limitado de atividades.

Para dar suporte a esses tipos de aplicativos, o designer de fluxo de trabalho é fornecido dentro do .NET Framework e pode ser hospedado dentro de um aplicativo WPF ou em um aplicativo WinForms com o código de hospedagem WPF apropriado. O exemplo DesignerRehosting demonstra:

  • Rehospedagem do designer WF.

  • Usando a caixa de ferramentas rehospedada e a grade de propriedades também.

Rehospedar o designer

Este exemplo mostra como criar o layout WPF para conter o designer, visto no layout de grade a seguir (código da caixa de ferramentas omitido por questões de espaço). Observe a nomenclatura das bordas que contêm o designer e a grade de propriedades.

<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>

Em seguida, o exemplo cria o designer e associa seu primário View e PropertyInspectorView com o contêiner apropriado na interface do usuário. Há algumas linhas adicionais de código no exemplo a seguir que merecem alguma explicação. A Register chamada é necessária para associar os designers de atividade padrão para as atividades fornecidas com o .NET Framework. Load é chamado para passar no item WF a ser editado. Finalmente, a View (tela primária) e PropertyInspectorView (a grade de propriedades) são colocadas na superfície da interface do usuário.

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;
}

Usando a caixa de ferramentas rehospedada

Este exemplo usa o controle de caixa de ferramentas rehospedado declarativamente em XAML. Observe que no código, pode-se passar um tipo para o ToolboxItemWrapper construtor.

<!-- 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>

Usando a amostra

  1. Abra a solução DesignerRehosting.sln no Visual Studio.

  2. Pressione F5 para compilar e executar o aplicativo.

  3. Um aplicativo WPF começa com um designer rehospedado.