Compartir vía


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

  1. Abra el proyecto HostingApplication que obtuvo siguiendo el procedimiento descrito en Tarea 2: Hospedar el Diseñador de flujo de trabajo.

  2. En el panel Explorador de soluciones, haga clic con el botón derecho en el archivo MainWindow.xaml y seleccione Ver código.

  3. Agregue un método GetToolboxControl a la clase MainWindow 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;
    }
    
  4. Agregue un método privado AddToolbox a la clase MainWindow 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);
    }
    
  5. Agregue una llamada al método AddToolBox en el constructor de clase MainWindow() tal como se muestra en el código siguiente:

    public MainWindow()
    {
        InitializeComponent();
        this.RegisterMetadata();
        this.AddDesigner();
    
        this.AddToolBox();
    }
    
  6. 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

  1. En el panel Explorador de soluciones, haga clic con el botón derecho en el archivo MainWindow.xaml y seleccione Ver código.

  2. Agregue el método AddPropertyInspector a la clase MainWindow 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);
    }
    
  3. Agregue una llamada al método AddPropertyInspector en el constructor de clase MainWindow() tal como se muestra en el código siguiente:

    public MainWindow()
    {
        InitializeComponent();
        this.RegisterMetadata();
        this.AddDesigner();
        this.AddToolBox();
    
        this.AddPropertyInspector();
    }
    
  4. 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);
        }

    }
}

Consulte también