工作 3:建立工具箱與 PropertyGrid 窗格
在這個工作中,您會建立工具箱和 PropertyGrid 窗格,並將它們新增至重新裝載的 Windows 工作流程設計工具中。
如需參考,請參閱本主題結尾的程式碼,此程式碼應該位於完成重新裝載工作流程設計工具主題系列三個工作後的 MainWindow.xaml.cs 檔案中。
若要建立工具箱,並將它加入至方格
開啟您遵循工作 2:裝載工作流程設計工具中描述的程序所取得的 HostingApplication 專案。
以滑鼠右鍵按一下 [方案總管] 窗格中的 MainWindow.xaml 檔案,然後選取 [檢視程式碼]。
將
GetToolboxControl
方法新增至建立 ToolboxControl 的MainWindow
類別,並將新的工具箱類別新增至工具箱,並將 Assign 和 Sequence 活動類型指派給該類別。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; }
將私用
AddToolbox
方法新增至MainWindow
類別,該類別會將工具箱放在格線的左資料行中。private void AddToolBox() { ToolboxControl tc = GetToolboxControl(); Grid.SetColumn(tc, 0); grid1.Children.Add(tc); }
將呼叫新增至在
MainWindow()
類別建構函式的AddToolBox
方法,如下列程式碼所示:public MainWindow() { InitializeComponent(); this.RegisterMetadata(); this.AddDesigner(); this.AddToolBox(); }
若要建立 PropertyGrid
以滑鼠右鍵按一下 [方案總管] 窗格中的 MainWindow.xaml 檔案,然後選取 [檢視程式碼]。
將
AddPropertyInspector
方法新增至MainWindow
類別,以將 PropertyGrid 窗格放在格線最右側的資料行中:private void AddPropertyInspector() { Grid.SetColumn(wd.PropertyInspectorView, 2); grid1.Children.Add(wd.PropertyInspectorView); }
在
AddPropertyInspector
類別建構函式中新增MainWindow()
方法的呼叫,如下列程式碼所示:public MainWindow() { InitializeComponent(); this.RegisterMetadata(); this.AddDesigner(); this.AddToolBox(); this.AddPropertyInspector(); }
按 F5 建置並執行解決方案。 工具箱、工作流程設計畫布與 PropertyGrid 窗格應會全部顯示,且當您將 Assign 活動或 Sequence 活動拖曳到設計畫布上時,屬性方格應會根據醒目提示的活動更新。
範例
MainWindow.xaml.cs 檔案現在應該會包含下列程式碼:
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);
}
}
}