Partager via


Réhébergement du concepteur

Le réhébergement du concepteur est un scénario courant qui fait référence à l'hébergement de la zone de dessin de conception du workflow dans une application personnalisée. L’application d’hébergement que la plupart des personnes connaissent bien est Visual Studio, mais il existe plusieurs scénarios où l’affichage du concepteur de workflow dans une application peut être utile :

  • Surveillance des applications (permettant à un utilisateur final de visualiser le processus, ainsi que des données d’exécution sur le processus, telles que l’état actif, les données de temps d’exécution agrégées ou d’autres informations sur une instance du flux de travail).

  • Applications qui permettent à un utilisateur de personnaliser le processus avec un ensemble limité d’activités.

Pour prendre en charge ces types d’applications, le concepteur de flux de travail est fourni à l’intérieur du .NET Framework et peut être hébergé à l’intérieur d’une application WPF ou dans une application WinForms avec le code d’hébergement WPF approprié. L’exemple DesignerRehosting illustre :

  • Réhébergement du concepteur WF.

  • Utilisation de la boîte à outils réhébergée ainsi que de la grille des propriétés.

Réhébergement du concepteur

Cet exemple montre comment créer la disposition WPF pour contenir le concepteur, vue dans la disposition de grille suivante (code de boîte à outils omis pour les problèmes d’espace). Notez la désignation des bordures qui contiennent le concepteur et la grille des propriétés.

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

Ensuite, l'exemple crée le concepteur et associe son View primaire et PropertyInspectorView au conteneur approprié dans l'interface utilisateur. Il existe quelques lignes de code supplémentaires dans l’exemple suivant qui méritent une explication. L’appel Register est nécessaire pour associer les concepteurs d’activités par défaut pour les activités fournies avec .NET Framework. Load est appelé pour transmettre l’élément WF à modifier. Enfin, le View (canevas principal) et PropertyInspectorView (grille de propriétés) sont intégrés à l’interface utilisateur.

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

Utilisation de la boîte à outils réhébergée

Cet exemple utilise le contrôle de boîte à outils réimplementé de manière déclarative en XAML. Notez que dans le code, il est possible de passer un type au ToolboxItemWrapper constructeur.

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

Utilisation de l’exemple

  1. Ouvrez la solution DesignerRehosting.sln dans Visual Studio.

  2. Appuyez sur F5 pour compiler et exécuter l’application.

  3. Une application WPF démarre avec un concepteur réhébergé.