Dela via


Uppgift 3: Skapa verktygslådan och EgenskapGrid-fönster

I den här uppgiften skapar du fönsterrutorna Verktygslåda och PropertyGrid och lägger till dem i det värdomvärdade Windows Workflow-Designer.

Som referens tillhandahålls den kod som ska finnas i filen MainWindow.xaml.cs när du har slutfört de tre uppgifterna i Designer om värd för arbetsflödesserien med ämnen i slutet av det här avsnittet.

Så här skapar du verktygslådan och lägger till den i rutnätet

  1. Öppna hostingApplication-projektet som du fick genom att följa proceduren som beskrivs i Uppgift 2: Värd för arbetsflödet Designer.

  2. I fönstret Solution Explorer högerklickar du på filen MainWindow.xaml och väljer Visa kod.

  3. Lägg till en GetToolboxControl metod i MainWindow klassen som skapar en ToolboxControl, lägger till en ny verktygslåda i verktygslådan och tilldelar aktivitetstyperna Assign och Sequence till den kategorin.

    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. Lägg till en privat AddToolbox metod i MainWindow klassen som placerar verktygslådan i den vänstra kolumnen i rutnätet.

    private void AddToolBox()
    {
        ToolboxControl tc = GetToolboxControl();
        Grid.SetColumn(tc, 0);
        grid1.Children.Add(tc);
    }
    
  5. Lägg till ett anrop till AddToolBox metoden i MainWindow() klasskonstruktorn enligt följande kod:

    public MainWindow()
    {
        InitializeComponent();
        this.RegisterMetadata();
        this.AddDesigner();
    
        this.AddToolBox();
    }
    
  6. Tryck på F5 för att skapa och köra din lösning. Verktygslådan som innehåller aktiviteterna Assign och Sequence ska visas.

Så här skapar du PropertyGrid

  1. I fönstret Solution Explorer högerklickar du på filen MainWindow.xaml och väljer Visa kod.

  2. AddPropertyInspector Lägg till metoden i MainWindow klassen för att placera fönstret PropertyGrid i kolumnen längst till höger i rutnätet:

    private void AddPropertyInspector()
    {
        Grid.SetColumn(wd.PropertyInspectorView, 2);
        grid1.Children.Add(wd.PropertyInspectorView);
    }
    
  3. Lägg till ett anrop till AddPropertyInspector metoden i MainWindow() klasskonstruktorn enligt följande kod:

    public MainWindow()
    {
        InitializeComponent();
        this.RegisterMetadata();
        this.AddDesigner();
        this.AddToolBox();
    
        this.AddPropertyInspector();
    }
    
  4. Tryck på F5 för att skapa och köra lösningen. Verktygslådan, arbetsflödets designarbetsyta och PropertyGrid-fönstren bör alla visas, och när du drar en Assign aktivitet eller en Sequence aktivitet till designarbetsytan bör egenskapsrutnätet uppdateras beroende på den markerade aktiviteten.

Exempel

Filen MainWindow.xaml.cs bör nu innehålla följande kod:

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

    }
}

Se även