Aufgabe 3: Erstellen der Toolbox- und PropertyGrid-Bereiche

In dieser Aufgabe erstellen Sie die Bereiche Toolbox und PropertyGrid und fügen sie dem neu gehosteten Windows Workflow-Designer hinzu.

Als Referenz finden Sie am Ende dieses Themas den Code, der sich in der Datei „MainWindow.xaml.cs“ befinden sollte, nachdem Sie die drei Aufgaben aus der Themenreihe Erneutes Hosten des Workflow-Designers abgeschlossen haben.

So erstellen Sie die Toolbox und fügen sie dem Raster hinzu.

  1. Öffnen Sie das HostingApplication-Projekt, das Sie mit dem in Aufgabe 2: Hosten des Workflow-Designers beschriebenen Verfahren erhalten haben.

  2. Klicken Sie im Bereich Projektmappen-Explorer mit der rechten Maustaste auf die Datei MainWindow.xaml, und wählen Sie Code anzeigen aus.

  3. Fügen Sie der MainWindow-Klasse eine GetToolboxControl-Methode hinzu, die ein ToolboxControl erstellt, der Toolbox eine neue Toolbox-Kategorie hinzufügt und die Aktivitätstypen Assign und Sequence dieser Kategorie zuweist.

    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. Fügen Sie der MainWindow-Klasse eine private AddToolbox-Methode hinzu, die die Toolbox in der linken Spalte des Rasters platziert.

    private void AddToolBox()
    {
        ToolboxControl tc = GetToolboxControl();
        Grid.SetColumn(tc, 0);
        grid1.Children.Add(tc);
    }
    
  5. Fügen Sie einen Aufruf der Methode AddToolBox im Konstruktor der Klasse MainWindow() hinzu, wie im folgenden Code gezeigt:

    public MainWindow()
    {
        InitializeComponent();
        this.RegisterMetadata();
        this.AddDesigner();
    
        this.AddToolBox();
    }
    
  6. Drücken Sie F5, um Ihre Projektmappe zu erstellen und auszuführen. Die Toolbox mit den Aktivitäten Assign und Sequence sollte angezeigt werden.

So erstellen Sie den PropertyGrid

  1. Klicken Sie im Bereich Projektmappen-Explorer mit der rechten Maustaste auf die Datei MainWindow.xaml, und wählen Sie Code anzeigen aus.

  2. Fügen Sie der Klasse MainWindow die Methode AddPropertyInspector hinzu, um den Bereich PropertyGrid in der Spalte ganz rechts im Raster zu platzieren:

    private void AddPropertyInspector()
    {
        Grid.SetColumn(wd.PropertyInspectorView, 2);
        grid1.Children.Add(wd.PropertyInspectorView);
    }
    
  3. Fügen Sie einen Aufruf der Methode AddPropertyInspector im Konstruktor der Klasse MainWindow() hinzu, wie im folgenden Code gezeigt:

    public MainWindow()
    {
        InitializeComponent();
        this.RegisterMetadata();
        this.AddDesigner();
        this.AddToolBox();
    
        this.AddPropertyInspector();
    }
    
  4. Drücken Sie F5, um die Projektmappe zu erstellen und auszuführen. Die Bereiche Toolbox, Canvas für den Workflowentwurf und PropertyGrid sollten alle angezeigt werden, und wenn Sie eine Assign-Aktivität oder eine Sequence-Aktivität auf die Entwurfscanvas ziehen, sollte das Eigenschaftsraster je nach der markierten Aktivität aktualisiert werden.

Beispiel

Die Datei MainWindow.xaml.cs sollte jetzt den folgenden Code enthalten:

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

    }
}

Weitere Informationen