Tarea 3: Crear los paneles de Cuadro de herramientas y PropertyGrid
En esta tarea, creará los paneles Cuadro de herramientas y PropertyGrid y lo agregará al Diseñador de flujo de trabajo de Windows rehospedado.
A modo de referencia, el código que debe incluir el archivo MainWindow.xaml.cs después de completar las tres tareas de la serie de temas Rehospedaje del Diseñador de flujo de trabajo se proporciona al final de este tema.
Para crear el Cuadro de herramientas y agregarlo a la cuadrícula
Abra el proyecto HostingApplication que obtuvo siguiendo el procedimiento descrito en Tarea 2: Hospedar el Diseñador de flujo de trabajo.
En el panel Explorador de soluciones, haga clic con el botón derecho en el archivo MainWindow.xaml y seleccione Ver código.
Agregue un método
GetToolboxControl
a la claseMainWindow
que crea ToolboxControl, agregue una categoría Cuadro de herramientas nueva al Cuadro de herramientas y asigne los tipos de actividad Assign y Sequence a esa categoría.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; }
Agregue un método privado
AddToolbox
a la claseMainWindow
para colocar el Cuadro de herramientas en la columna izquierda en la cuadrícula.private void AddToolBox() { ToolboxControl tc = GetToolboxControl(); Grid.SetColumn(tc, 0); grid1.Children.Add(tc); }
Agregue una llamada al método
AddToolBox
en el constructor de claseMainWindow()
tal como se muestra en el código siguiente:public MainWindow() { InitializeComponent(); this.RegisterMetadata(); this.AddDesigner(); this.AddToolBox(); }
Presione F5 para compilar y ejecutar la solución. Se debería mostrar el Cuadro de herramientas que contiene las actividades Assign y Sequence.
Para crear PropertyGrid
En el panel Explorador de soluciones, haga clic con el botón derecho en el archivo MainWindow.xaml y seleccione Ver código.
Agregue el método
AddPropertyInspector
a la claseMainWindow
para colocar el panel PropertyGrid en la columna situada más a la derecha en la cuadrícula:private void AddPropertyInspector() { Grid.SetColumn(wd.PropertyInspectorView, 2); grid1.Children.Add(wd.PropertyInspectorView); }
Agregue una llamada al método
AddPropertyInspector
en el constructor de claseMainWindow()
tal como se muestra en el código siguiente:public MainWindow() { InitializeComponent(); this.RegisterMetadata(); this.AddDesigner(); this.AddToolBox(); this.AddPropertyInspector(); }
Presione F5 para compilar y ejecutar la solución. Se deberían mostrar todos los paneles (el Cuadro de herramientas, el lienzo de diseño de flujo de trabajo y PropertyGrid) y cuando arrastre una actividad Assign o una actividad Sequence al lienzo del diseño, la cuadrícula de propiedad debe actualizarse en función de la actividad resaltada.
Ejemplo
El archivo MainWindow.xaml.cs debe contener ahora el código siguiente:
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);
}
}
}