Tâche 3 : créer les volets Toolbox et PropertyGrid
Dans cette tâche, vous allez créer les volets Boîte à outils et PropertyGrid et les ajouter au Concepteur de flux de travail Windows réhébergé.
Pour référence, le code qui doit se trouver dans le fichier MainWindow.xaml.cs une fois terminée l’exécution des trois tâches de la série de rubriques Réhébergement du Concepteur de flux de travail est fourni à la fin de cette rubrique.
Pour créer la boîte à outils et l'ajouter à la grille
Ouvrez le projet HostingApplication que vous avez obtenu en suivant la procédure décrite dans Tâche 2 : Héberger le Concepteur de flux de travail.
Dans le volet Explorateur de solutions, cliquez avec le bouton droit sur le fichier MainWindow.xaml et sélectionnez Afficher le code.
Ajoutez une méthode
GetToolboxControl
à la classeMainWindow
qui crée un ToolboxControl, ajoute une nouvelle catégorie Boîte à outils à la Boîte à outils, et attribue les types d’activité Assign et Sequence à cette catégorie.private ToolboxControl GetToolboxControl() { // Create the ToolBoxControl. var ctrl = new ToolboxControl(); // Create a category. var category = new ToolboxCategory("category1"); // Create Toolbox items. var tool1 = new ToolboxItemWrapper("System.Activities.Statements.Assign", typeof(Assign).Assembly.FullName, null, "Assign"); var tool2 = new ToolboxItemWrapper("System.Activities.Statements.Sequence", typeof(Sequence).Assembly.FullName, null, "Sequence"); // Add the Toolbox items to the category. category.Add(tool1); category.Add(tool2); // Add the category to the ToolBox control. ctrl.Categories.Add(category); return ctrl; }
Ajoutez une méthode
AddToolbox
privée à la classeMainWindow
qui place la Boîte à outils dans la colonne de gauche de la grille.private void AddToolBox() { ToolboxControl tc = GetToolboxControl(); Grid.SetColumn(tc, 0); grid1.Children.Add(tc); }
Ajoutez un appel à la méthode
AddToolBox
dans le constructeur de classeMainWindow()
, comme illustré dans le code suivant :public MainWindow() { InitializeComponent(); this.RegisterMetadata(); this.AddDesigner(); this.AddToolBox(); }
Appuyez sur F5 pour générer et exécuter votre solution. La Boîte à outils qui contient les activités Assign et Sequence doit s’afficher.
Pour créer PropertyGrid
Dans le volet Explorateur de solutions, cliquez avec le bouton droit sur le fichier MainWindow.xaml et sélectionnez Afficher le code.
Ajoutez la méthode
AddPropertyInspector
à la classeMainWindow
pour placer le volet PropertyGrid dans la colonne la plus à droite de la grille :private void AddPropertyInspector() { Grid.SetColumn(wd.PropertyInspectorView, 2); grid1.Children.Add(wd.PropertyInspectorView); }
Ajoutez un appel à la méthode
AddPropertyInspector
dans le constructeur de classeMainWindow()
, comme illustré dans le code suivant :public MainWindow() { InitializeComponent(); this.RegisterMetadata(); this.AddDesigner(); this.AddToolBox(); this.AddPropertyInspector(); }
Pour générer et exécuter la solution, appuyez sur F5. La Boîte à outils, la zone de conception de flux de travail, et les volets PropertyGrid doivent tous être affichés, et lorsque vous faites glisser une activité Assign ou une activité Sequence sur la zone de conception, la grille des propriétés doit être mise à jour en fonction de l’activité en surbrillance.
Exemple
Le fichier MainWindow.xaml.cs doit maintenant contenir le code suivant :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
// dlls added.
using System.Activities;
using System.Activities.Core.Presentation;
using System.Activities.Presentation;
using System.Activities.Presentation.Metadata;
using System.Activities.Presentation.Toolbox;
using System.Activities.Statements;
using System.ComponentModel;
namespace HostingApplication
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private WorkflowDesigner wd;
public MainWindow()
{
InitializeComponent();
RegisterMetadata();
AddDesigner();
this.AddToolBox();
this.AddPropertyInspector();
}
private void AddDesigner()
{
// Create an instance of WorkflowDesigner class.
this.wd = new WorkflowDesigner();
// Place the designer canvas in the middle column of the grid.
Grid.SetColumn(this.wd.View, 1);
// Load a new Sequence as default.
this.wd.Load(new Sequence());
// Add the designer canvas to the grid.
grid1.Children.Add(this.wd.View);
}
private void RegisterMetadata()
{
var dm = new DesignerMetadata();
dm.Register();
}
private ToolboxControl GetToolboxControl()
{
// Create the ToolBoxControl.
var ctrl = new ToolboxControl();
// Create a category.
var category = new ToolboxCategory("category1");
// Create Toolbox items.
var tool1 =
new ToolboxItemWrapper("System.Activities.Statements.Assign",
typeof(Assign).Assembly.FullName, null, "Assign");
var tool2 = new ToolboxItemWrapper("System.Activities.Statements.Sequence",
typeof(Sequence).Assembly.FullName, null, "Sequence");
// Add the Toolbox items to the category.
category.Add(tool1);
category.Add(tool2);
// Add the category to the ToolBox control.
ctrl.Categories.Add(category);
return ctrl;
}
private void AddToolBox()
{
ToolboxControl tc = GetToolboxControl();
Grid.SetColumn(tc, 0);
grid1.Children.Add(tc);
}
private void AddPropertyInspector()
{
Grid.SetColumn(wd.PropertyInspectorView, 2);
grid1.Children.Add(wd.PropertyInspectorView);
}
}
}