Compartilhar via


Tarefa 3: Criar os painéis de Caixa de ferramentas e PropertyGrid

Nesta tarefa, você criará os painéis de Caixa de Ferramentas e PropertyGrid, e os adicionará ao Designer de Fluxo de Trabalho do Windows hospedado novamente.

Para referência, o código que deve estar no arquivo MainWindow.xaml.cs após a conclusão das três tarefas na série de tópicos Alterar a Hospedagem do Designer de Fluxo de Trabalho, no final deste tópico.

Para criar a caixa de ferramentas e adicioná-la à grade

  1. Abra o projeto HostingApplication obtido com o procedimento descrito em Tarefa 2: hospedar o Designer de Fluxo de Trabalho.

  2. No painel do Gerenciador de Soluções, clique com o botão direito do mouse no arquivo MainWindow.xaml e selecione Exibir Código.

  3. Adicione um método GetToolboxControl à classe MainWindow que cria um ToolboxControl, adiciona uma nova categoria de Caixa de Ferramentas à Caixa de Ferramentas e atribui os tipos de atividade Assign e Sequence a essa categoria.

    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. Adicione um método AddToolbox particular à classe MainWindow que coloca a Caixa de Ferramentas na coluna esquerda na grade.

    private void AddToolBox()
    {
        ToolboxControl tc = GetToolboxControl();
        Grid.SetColumn(tc, 0);
        grid1.Children.Add(tc);
    }
    
  5. Adicione uma chamada para o método de AddToolBox no construtor de classe MainWindow() como mostra o código a seguir:

    public MainWindow()
    {
        InitializeComponent();
        this.RegisterMetadata();
        this.AddDesigner();
    
        this.AddToolBox();
    }
    
  6. Pressione F5 para compilar e executar sua solução. A Caixa de Ferramentas que contém as atividades Assign e dSequence deve ser exibida.

Para criar o PropertyGrid

  1. No painel do Gerenciador de Soluções, clique com o botão direito do mouse no arquivo MainWindow.xaml e selecione Exibir Código.

  2. Adicione o método AddPropertyInspector à classe MainWindow para colocar o painel PropertyGrid na coluna mais à direita na grade:

    private void AddPropertyInspector()
    {
        Grid.SetColumn(wd.PropertyInspectorView, 2);
        grid1.Children.Add(wd.PropertyInspectorView);
    }
    
  3. Adicione uma chamada para o método de AddPropertyInspector no construtor de classe MainWindow() como mostra o código a seguir:

    public MainWindow()
    {
        InitializeComponent();
        this.RegisterMetadata();
        this.AddDesigner();
        this.AddToolBox();
    
        this.AddPropertyInspector();
    }
    
  4. Pressione F5 para compilar e executar a solução. Os painéis de Caixa de Ferramentas, tela de design de fluxo de trabalho e PropertyGrid devem ser todos são exibidos e, quando você arrasta uma atividade Assign ou Sequence na tela de design, a grade de propriedades deve ser atualizada, dependendo da atividade realçada.

Exemplo

O arquivo MainWindow.xaml.cs agora deve conter o código a seguir:

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

    }
}

Confira também