none
自定义工作流设计器(1) RRS feed

  • 常规讨论

  • 第一部分
    基础工作,建立代码结构框架
    1.创建项目WorkflowDesignerControl
    1.1:WorkflowView和DesignSurface,workflowView是微软提供的工作流设计API,所有的操作都要在上面进行;DesignSurface是WorkflowView的设计时支持
    WorkflowView需要从中获得一些资源。
    1.2:工具箱和属性窗口也要放到WorkflowDesignerControl中
     

    Toolbox toolbox = new Toolbox(this);
      
    this.propertyGridSplitter.Panel1.Controls.Add(toolbox);
      toolbox.Dock 
    = DockStyle.Fill;
      toolbox.BackColor 
    = BackColor;
      toolbox.Font 
    = WorkflowTheme.CurrentTheme.AmbientTheme.Font; 

    2、在WorkflowDesignerControl加入ActivityLibrary的引用
      DesignerHostingApplication中加入ActivityLibrary和WorkflowDesignerControl的引用
      DesignerHostingApplication中加入System.Design,System.Drawing.Design,System.Workflow.Activities,System.Workflow.ComponentModel的引用

    3.所有自定义的Activitie放入一个project,这样基本的代码架构就建立好了。

    第二部分
    winfrom中集成可编程的wf设计器
    1.首先创建DesignerHostingApplication的解决方案
    重命名from1.cs为DesignerShell.cs,并加入工具条
    Toolstrip
     Name: toolStrip
     GripStyle: Hidden
     RenderMode: System
     Ensure the Dock property is set to Top
    将WorkflowDesignControl加入toolStrip
     Name: workflowDesignerControl
     Dock: Fill
    2.使设计器支持zooming
     

    public void ProcessZoom(int zoomFactor)
            
    {
                
    this.workflowView.Zoom = zoomFactor;
                
    this.workflowView.Update();
            }

    2.1:使用预定义的zoom levels 25%, 100% and 200%,zoom设计器in or out
     在DesignerShell.cs中调用ProcessZoom
     

    private void zoomDropDownMenuItem_Click(object sender, EventArgs e)
            
    {
                
    if (sender is ToolStripMenuItem)
                
    {
                    ToolStripMenuItem menuItem 
    = (ToolStripMenuItem)sender;

                    
    int zoomFactor = 0;

                    
    bool result = Int32.TryParse(menuItem.Tag.ToString(), out zoomFactor);

                    
    if (result)
                    
    {
                        
    this.workflowDesignerControl.ProcessZoom(zoomFactor);
                    }

                }

            }


    2.2:在toolstrip中加入dropdownButton并定义属性:
      Name: zoomDropDown
      DisplayStyle: Text
      Text: Zoom
      编辑DropDownButton,加入三个Item对应Text分别为:25% ,100%,200%
      每个item分别定义name和tag,分别为;mni25PercentZoom,25;mni100PercentZoom,100;mni200PercentZoom,200;
      并定义click事件

    • 已编辑 danxms 2009年6月25日 7:48
    2009年6月25日 7:48