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 avec laquelle la plupart des personnes sont familières est Visual Studio, mais il existe plusieurs scénarios où l'affichage du concepteur de workflow dans une application peut être utile :
Applications d'analyse (permettant à un utilisateur final de visualiser le processus ainsi que les données d'exécution sur le processus, telles que l'état actuellement actif, les données de durée d'exécution agrégées ou d'autres informations relatives à une instance du workflow).
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 workflow accompagne le .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 les opérations suivantes :
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, comme dans la disposition de grille suivante (code de boîte à outils omis pour des raisons 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. Quelques lignes supplémentaires de code dans l'exemple suivant méritent une explication. L’appel de 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 passer l'élément WF à modifier. Enfin, le View (zone de dessin primaire) et le PropertyInspectorView (grille des propriétés) sont placés sur la surface d'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 de façon déclarative le contrôle de boîte à outils réhébergée dans XAML. Notez que, dans le code, un type peut être passé au constructeur 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>
Utilisation de l'exemple
Ouvrez la solution DesignerRehosting.sln dans Visual Studio.
Appuyez sur F5 pour compiler et exécuter l'application.
Une application WPF démarre avec un concepteur réhébergé.