VS2010 Workflow Designer可以自动排列布局吗?

时间:2012-02-03 13:39:33

标签: .net visual-studio-2010 workflow-foundation-4

在VS2010 WF4工作流设计师有没有办法让它自动安排布局?我想在工作流程的顶部附近添加一个新步骤,我看不到任何方法可以轻松地为新项目腾出空间。我要添加新步骤的下面的流程是带有多个分支的switch语句;它甚至似乎不可能多选项目并将它们全部移动以腾出空间。

3 个答案:

答案 0 :(得分:3)

可悲的是,除了添加您要添加​​的内容然后删除.layout文件之外,没有其他方法可以强制它生成新的布局。如果新安排比旧安排更糟,请确保备份文件。

答案 1 :(得分:2)

展开DataSet.xsd树并删除XSS文件...

DataSet.xsd
--DataSet.cs
--DataSet.xsc
--DataSet.xss <-- Delete this one...
--DataSet.cs
--DataSet.Designer.cs

答案 2 :(得分:-1)

如果您喜欢冒险,可以运行此类代码(首先备份您的XSS文件,此代码将覆盖它!)。代码将整齐地自动排列设计器中的形状。您可以调整常量以获得最佳效果。它们的含义应该是显而易见的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
using System.Text;

namespace AutoArrangeXss
{
    class Program
    {
        static void Main(string[] args)
        {
            AutoArrange(yourXssFilePath);
        }

    static void AutoArrange(string xssFile)
    {
        const int xPad = 80;
        const int yPad = 20;
        const int maxY = 1500;

        XDocument doc = XDocument.Load(xssFile);
        var ns = doc.Root.Name.Namespace;

        var shapes = doc.Descendants(ns + "Shape").ToList();

        int X = 0;
        int Y = 0;
        int columnW = 0;
        foreach (XElement shape in shapes)
        {
            int Height = int.Parse(shape.Attribute("Height").Value);
            int Width = int.Parse(shape.Attribute("Width").Value);
            if (Width > columnW) columnW = Width;

            shape.Attribute("X").Value = X.ToString();
            shape.Attribute("Y").Value = Y.ToString();

            Y += Height + yPad;

            if (Y > maxY)
            {
                X += columnW  + xPad;
                Y = 0;
                columnW = 0;
            }

        }

        doc.Save(xssFile);

    }